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 表达式
相关推荐
鲸说MySQL4 小时前
MySQL表文件损坏
数据库·mysql
a***59264 小时前
【SQL技术】不同数据库引擎 SQL 优化方案剖析
数据库·sql
0***v7774 小时前
使用Dify访问数据库(mysql)
数据库·mysql
愚戏师4 小时前
MySQL 数据导出
数据库·笔记·mysql
倔强的石头_4 小时前
openGauss向量数据库:引领AI时代数据智能新纪元
数据库
愚戏师5 小时前
MySQL SQL 注入
数据库·sql·mysql
郑重其事,鹏程万里5 小时前
键值储存数据库(mapdb)
数据库
c***69305 小时前
超详细:数据库的基本架构
数据库·架构
Sunhen_Qiletian5 小时前
《Python开发之语言基础》第六集:操作文件
前端·数据库·python
whn19776 小时前
达梦DW数据库安装
数据库