我们目标是 把 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由程序设置,例如使用雪花算法
⚠️ 注意事项
- 函数与触发器
- 删除跟内置拓展函数uuid-ossp相关的函数,需要的自己设置