postgress数据迁移gaussdb注意事项

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


🔑 需要修改的部分

1. 扩展(Extension)

  • PostgreSQL 里:

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

  • 解决办法 :用 openGauss 内置的 gen_random_uuid()sys_guid() 替代。

    scss 复制代码
    id uuid DEFAULT gen_random_uuid() NOT NULL

2. UUID

  • PostgreSQL:uuid DEFAULT uuid_generate_v4()

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

  • 修改

    scss 复制代码
    DEFAULT uuid_generate_v4()  →  DEFAULT gen_random_uuid()

3. JSON 与 JSONB

  • PostgreSQL 支持 json / jsonb

  • openGauss 只支持 json ,不支持 jsonb

  • 修改

    复制代码
    jsonb → json

4. 时间类型

  • PostgreSQL:

    sql 复制代码
    timestamp without time zone
  • openGauss:只支持 timestamp,语法中没有 without time zone 这一套。

  • 修改

    sql 复制代码
    timestamp without time zone → timestamp
    timestamp(6) without time zone → timestamp(6)
  • 同时,CURRENT_TIMESTAMP(0) 在 openGauss 里直接用 CURRENT_TIMESTAMPSYSTIMESTAMP


5. 序列与自增

  • PostgreSQL:

    bash 复制代码
    id integer DEFAULT nextval('public.task_id_sequence'::regclass)
  • openGauss:支持 CREATE SEQUENCE,但推荐用 IDENTITY 列。

  • 修改

    vbnet 复制代码
    id integer GENERATED BY DEFAULT AS IDENTITY

    或保持 create sequence + nextval('xxx'),但要去掉 ::regclass


6. 二进制类型

  • PostgreSQL:bytea
  • openGauss:支持 bytea,但在某些版本里更推荐 blob
  • 修改建议 :保留 bytea(兼容),如果报错则替换成 blob

7. 类型强制转换

  • PostgreSQL 常见:

    php 复制代码
    'active'::character varying
    '{}'::text
  • openGauss 不支持 :: 这种写法,要改成 CAST(...).

  • 修改

    sql 复制代码
    'active'::character varying  →  CAST('active' AS varchar)
    '{}'::text                  →  CAST('{}' AS text)

8. 系统函数

  • PostgreSQL dump 中有:

    arduino 复制代码
    (now() AT TIME ZONE 'UTC'::text)
  • openGauss 不支持 AT TIME ZONE

  • 修改

    • CURRENT_TIMESTAMPLOCALTIMESTAMP 代替。
    • 如果必须存 UTC,可以在应用层转换。

9. 注释

  • COMMENT ON EXTENSIONCOMMENT ON COLUMN 保持兼容,一般不用修改。

⚠️ 注意事项

  1. 索引

    • 如果 dump 文件里有 USING ginUSING gist 之类的索引,openGauss 不完全支持,需要调整。
    • JSONB 的 GIN 索引不可用。
  2. 函数与触发器

    • PostgreSQL 自定义函数(如 plpgsql)可能需要改为 openGauss 兼容语法。
  3. 大小写

    • openGauss 默认把未加引号的表名/列名转小写,迁移时要注意是否需要加 "" 保留大小写。
  4. 性能参数

    • PostgreSQL 的 WITH (OIDS=FALSE)TABLESPACEFILLFACTOR 在 openGauss 里大多无效,需删除。

✅ 总结:迁移时必改的点

  1. 去掉 CREATE EXTENSION "uuid-ossp"
  2. uuid_generate_v4()gen_random_uuid()
  3. jsonbjson
  4. timestamp without time zonetimestamp
  5. DEFAULT CURRENT_TIMESTAMP(0)DEFAULT CURRENT_TIMESTAMP
  6. nextval('xxx'::regclass)nextval('xxx')IDENTITY
  7. 类型转换 ::CAST()
  8. 去掉 AT TIME ZONE 表达式
相关推荐
郭俊强2 小时前
nestjs 连接redis
数据库·redis·缓存
chen_note3 小时前
Redis数据持久化——RDB快照和Aof日志追加
java·数据库·mybatis·持久化·aof·rdb
携欢3 小时前
PortSwigger靶场之SQL injection with filter bypass via XML encoding通关秘籍
xml·数据库·sql
GBASE3 小时前
GBASE南大通用技术分享:GBase 8s数据库Q转义功能解析(上)
数据库
闲人编程3 小时前
PyQt6 进阶篇:构建现代化、功能强大的桌面应用
数据库·python·oracle·gui·脚本·pyqt6·软件
speop4 小时前
【datawhale组队学习】RAG技术 -TASK05 向量数据库实践(第三章3、4节)
数据库·学习
EnigmaCoder4 小时前
【Linux】用户与用户组管理
linux·运维·服务器·数据库
工业甲酰苯胺4 小时前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
NineData5 小时前
NineData 最新发布 SQL Server 双向实时同步功能
数据库·后端·架构