同 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 中,表空间为数据库级别的对象。这意味者,在你访问同一个实例中不同的数据库对象时,虽然可能会看到相同名字的表空间,实际上,它们是分属于各自数据库中不同的表空间对象。
该差异需要数据库管理员特别关注,对于应用开发人员不受影响。
在有些运行统计视图中(如: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 类型的索引替代它。
-
不支持系统列中的 xmin,cmin,xmax,cmax
在 Redrock Postgres 中,相应的系统列为 rowxid,rowcid,rowtime。
如果您在配置文件postgresql.conf
中使用了以下任何参数,则应将其删除或者重命名。
- vacuum_freeze_table_age 已移除
- vacuum_freeze_min_age 已移除
- vacuum_multixact_freeze_table_age 已移除
- vacuum_multixact_freeze_min_age 已移除
- vacuum_cleanup_index_scale_factor 已移除
- vacuum_cost_delay 已移除
- vacuum_cost_page_hit 已移除
- vacuum_cost_page_miss 已移除
- vacuum_cost_page_dirty 已移除
- vacuum_cost_limit 已移除
- autovacuum 重命名为 autoanalyze
- log_autovacuum_min_duration 重命名为 log_autoanalyze_min_duration
- autovacuum_max_workers 重命名为 autoanalyze_max_workers
- autovacuum_naptime 重命名为 autoanalyze_naptime
- autovacuum_vacuum_threshold 已移除
- autovacuum_analyze_threshold 重命名为 autoanalyze_base_threshold
- autovacuum_vacuum_scale_factor 已移除
- autovacuum_analyze_scale_factor 重命名为 autoanalyze_scale_factor
- autovacuum_freeze_max_age 已移除
- autovacuum_multixact_freeze_max_age 已移除
- autovacuum_vacuum_cost_delay 已移除
- autovacuum_vacuum_cost_limit 已移除
- autovacuum_work_mem 已移除
- db_user_namespace 已移除,在 Redrock Postgres 中,用户本来就是数据库级别的对象。
- old_snapshot_threshold 已移除
- track_commit_timestamp 已移除,函数
pg_xact_commit_timestamp
一直都是可用的。
如果您在表定义中使用了以下任何 存储参数,则应将其删除或者重命名。
autovacuum_enabled
重命名为autoanalyze_enabled
,toast.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_duration
,toast.log_autovacuum_min_duration
重命名为toast.log_autoanalyze_min_duration