Redrock Postgres 文档
主页 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页
编辑页面

同 PostgreSQL 的兼容性

Redrock Postgres 是在 PostgreSQL 的基础上开发的,在客户端访问协议和SQL语法层面,Redrock Postgres 同 PostgreSQL 保持兼容。如果您的应用是基于 PostgreSQL 开发的,那么:

  • 基于同 PostgreSQL 在客户端访问协议层面的二进制兼容,可以使用和 PostgreSQL 一样的各种编程语言驱动访问 Redrock Postgres,如:Java, C/C++, .Net, Python, Ruby, Perl, Go, ODBC 等。
  • 基于同 PostgreSQL 在 SQL 语法上的严格兼容,可以在应用软件不做任何改动的情况下迁移到 Redrock Postgres。
  • 可以使用 PostgreSQL 相关的桌面管理工具访问 Redrock Postgres,如:DBeaver、pgAdmin 4、Navicat for PostgreSQL 等。

这意味着,在多数情况下,您可以使用 pg_dump 导出 PostgreSQL 中的数据,卸载 PostgreSQL 并安装 Redrock Postgres,将导出的数据导入到 Redrock Postgres 中,就可以开始了。

特性差异说明

角色

在 PostgreSQL 中,角色为实例级别的对象,而在 Redrock Postgres 中,角色为数据库级别的对象。这意味者,在你访问同一个实例中不同的数据库对象时,虽然可能会看到相同名字的角色,实际上,它们是分属于各自数据库中不同的角色对象。

该差异需要数据库管理员特别关注,对于应用开发人员不受影响。

表空间

在 PostgreSQL 中,表空间为实例级别的对象,而在 Redrock Postgres 中,表空间为数据库级别的对象。这意味者,在你访问同一个实例中不同的数据库对象时,虽然可能会看到相同名字的表空间,实际上,它们是分属于各自数据库中不同的表空间对象。

该差异需要数据库管理员特别关注,对于应用开发人员不受影响。

PID

在有些运行统计视图中(如:pg_stat_activity, pg_locks),存在名称为pid的字段。在 PostgreSQL 中,这些字段表示的是操作系统进程号,而在 Redrock Postgres 中,表示的是数据库进程号。

pg_stat_activity视图中,存在名称为spid的字段,表示真实的操作系统进程号。

不支持的功能特性

  • VACUUM FULL 功能已废弃,仅语法保留

    Redrock Postgres 引入了撤消日志,修改和删除元组时将产生的老版本的记录信息存放在回滚段中,实现了就地更新,所以不需要对表中的数据记录进行重组。

  • VACUUM FREEZE 功能已废弃,仅语法保留

    在 Redrock Postgres 中,事务 ID 类型xid是由回滚段号、事务槽号、和序列号组成的,不会出现事务 ID 被重用的情况,所以并不需要对表元组进行冻结。

  • CREATE DATABASE 命令不支持指定TABLESPACE选项

    您可以在 CREATE DATABASE 命令中指定数据库的存储位置,创建新的数据库。如:CREATE DATABASE name LOCATION ‘directory’。

  • CREATE DATABASE 命令不支持指定OWNER选项

    您可以在创建完数据库后,登录到新建的数据库,执行 ALTER DATABASE OWNER 命令,修改数据库的拥有者。

  • ALTER DATABASE TABLESPACE功能已废弃

    您可以使用CREATE DATABASE命令,指定原数据库为模板数据库,指定新的数据库存储位置,创建新的数据库。如:CREATE DATABASE newname TEMPLATE dbname LOCATION ‘directory’。

  • ALTER DATABASE OWNER 命令不支持修改除当前数据库以外的其他数据库

    您可以登录到需要更改的数据库执行修改数据库拥有者的命令。

  • ALTER ROLE 命令不支持使用IN DATABASE指定更改的数据库

    您可以登录到需要更改的数据库执行更改数据库角色的命令。

  • 不支持可序列化隔离级别

    请使用标准的读已提交和可重复读隔离级别。

  • 不支持 SP-GiST索引

    您可以使用 GiST 类型的索引替代它。

  • 不支持系统列中的 xmincminxmaxcmax

    在 Redrock Postgres 中,相应的系统列为 rowxidrowcidrowtime

不支持的配置参数

如果您在配置文件postgresql.conf中使用了以下任何参数,则应将其删除或者重命名。

不支持的表存储参数

如果您在表定义中使用了以下任何 存储参数,则应将其删除或者重命名。

  • autovacuum_enabled 重命名为 autoanalyze_enabledtoast.autovacuum_enabled 重命名为 toast.autoanalyze_enabled
  • vacuum_index_cleanup, toast.vacuum_index_cleanup 已移除
  • vacuum_truncate, toast.vacuum_truncate 已移除
  • autovacuum_vacuum_threshold, toast.autovacuum_vacuum_threshold 已移除
  • autovacuum_vacuum_scale_factor, toast.autovacuum_vacuum_scale_factor 已移除
  • autovacuum_analyze_threshold 重命名为 autoanalyze_base_threshold
  • autovacuum_analyze_scale_factor 重命名为 autoanalyze_scale_factor
  • autovacuum_vacuum_cost_delay, toast.autovacuum_vacuum_cost_delay 已移除
  • autovacuum_vacuum_cost_limit, toast.autovacuum_vacuum_cost_limit 已移除
  • autovacuum_freeze_min_age, toast.autovacuum_freeze_min_age 已移除
  • autovacuum_freeze_max_age, toast.autovacuum_freeze_max_age 已移除
  • autovacuum_freeze_table_age, toast.autovacuum_freeze_table_age 已移除
  • autovacuum_multixact_freeze_min_age, toast.autovacuum_multixact_freeze_min_age 已移除
  • autovacuum_multixact_freeze_max_age, toast.autovacuum_multixact_freeze_max_age 已移除
  • autovacuum_multixact_freeze_table_age, toast.autovacuum_multixact_freeze_table_age 已移除
  • log_autovacuum_min_duration 重命名为 log_autoanalyze_min_durationtoast.log_autovacuum_min_duration 重命名为 toast.log_autoanalyze_min_duration