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 表达式
相关推荐
人道领域1 小时前
Day | 11 【苍穹外卖统计业务的实现:含详细思路分析】
java·数据库·后端·苍穹外卖
ZTLJQ7 小时前
数据的基石:Python中关系型数据库完全解析
开发语言·数据库·python
升鲜宝供应链及收银系统源代码服务8 小时前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
跟着珅聪学java8 小时前
js编写中文转unicode 教程
前端·javascript·数据库
小江的记录本8 小时前
【Redis】Redis全方位知识体系(附《Redis常用命令速查表(完整版)》)
java·数据库·redis·后端·python·spring·缓存
还是做不到嘛\.9 小时前
Dvwa靶场-SQL Injection
数据库·sql·web安全
楼田莉子9 小时前
MySQL数据库:MySQL的数据类型
数据库·学习·mysql
2401_879693879 小时前
数据分析与科学计算
jvm·数据库·python
LJianK110 小时前
java封装
java·前端·数据库
知识分享小能手11 小时前
MongoDB入门学习教程,从入门到精通,MongoDB查询(4)
数据库·学习·mongodb