postgress数据迁移opengauss注意事项

181 阅读1分钟

我们目标是 把 PostgreSQL 的 SQL dump 适配到 openGauss。openGauss 是基于 PostgreSQL 9.2 分支演化的,但它并不是 100% 兼容,需要特别注意。结合你提供的 dump 文件和 openGauss 的兼容性,我总结如下:


最初的postgress版本

PostgreSQL 15.7 on x86_64-pc-linux-musl, compiled by gcc (Alpine 13.2.1_git20240309) 13.2.1 20240309, 64-bit

安装的opengauss版本

(openGauss 5.0.3 build 89d144c2) compiled at 2024-07-31 21:24:08 commit 0 last mr   on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit

🔑 需要修改的部分

1. 扩展(Extension)

  • PostgreSQL 里:

    CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
    
  • openGauss 不支持 extension,uuid-ossp 也不可用。

  • 解决办法:用 openGauss 中自定义的函数 替代。


2. UUID

  • PostgreSQL:uuid DEFAULT uuid_generate_v4()

  • openGauss:支持 uuid 类型,但没有 uuid_generate_v4()

  • 修改: 创建自定义函数

CREATE OR REPLACE FUNCTION public.uuid_generate_v4()
RETURNS uuid
LANGUAGE plpgsql
NOT FENCED NOT SHIPPABLE
AS $function$
DECLARE
v_uuid uuid;
BEGIN
SELECT md5(random()::text || clock_timestamp()::text)::uuid INTO v_uuid;
RETURN v_uuid;
END;
$function$;
;

建议uuid由程序设置,例如使用雪花算法

⚠️ 注意事项

  1. 函数与触发器
    • 删除跟内置拓展函数uuid-ossp相关的函数,需要的自己设置