暂无图片
暂无图片
12
暂无图片
暂无图片
暂无图片

知兼容性之变,升数据库也稳

原创 多米爸比 2023-12-19
955

PostgreSQL里许多功能都在各个版本不断进行完善,例如json数据类型早已被支持,而12的SQL/JSON函数表达式就更易用;13对分区表与逻辑复制的超融合也是如此;14对大量连接及逻辑复制大事务场景的性能做了极大的优化;15对内存统计信息及并行压缩备份提供的崭新方案;16对I/O、vacuum及应用开发方面也做了大量改良。

总而言之,PG每个版本的新功能是非常吸引我们进行更新升级,但升级也可能会对业务造成一些不兼容的隐患。

本文将对当前主流版本12~16总结一些已知兼容性变化,为我们平滑稳定升级PG数据库提供一些参考。

PostgreSQL 12

1.去掉recovery.conf文件,合并恢复参数至postgresql.conf文件

在12以前,recovery.conf文件包含了用于配置恢复的参数,例如:

primary_conninfo restore_command

为了对参数进行统一管理,从12开始recovery.conf里的参数合并到postgresql.conf文件中。

2.oid对象标识符开关

在12之前允许建表时使用with(oids)为数据行生成oid值,例如业务表没有主键时,可以通过该特性进行唯一标识,从12开始关闭了这个特性,建表时不再支持使用with(oids)属性。

3.pg_verify_checksums校验和工具更名为pg_checksums

在12里校验和工具除了重命名为pg_checksums,还支持–enable/–disable进行校验和开关项控制。

PostgreSQL 13

1.wal_keep_segments参数更名为wal_keep_size

流复制场景下为了预防主库清理wal导致长期失联的备库需要重建,可通过该参数进行缓解,重命名后的wal_keep_size计量单位更加明确。

2.UUID内置函数

在13之前使用UUID数据类型需要加载uuid_ossp,从13开始可以直接使用gen_random_uuid系统函数,如果从13回切12时需要注意这一点。

PostgreSQL 14

1.用户口令默认加密方式由md5改为scram-sha-256

有的客户应用程序经常会升级PG数据库版本,但升级14后突然发现程序提示连接失败。因为从14开始用户口令默认加密方式采用scram-sha-256,同时客户端程序的数据库驱动也需要更新至支持scram-sha-256的版本。

2.新形式的SQL函数

从14开始创建自定义函数时有另外一种新形式的begin atomic语法,使用新形式的SQL函数可以跟踪函数体里对象的依赖关系,但也需要注意客户应用程序获取函数元数据的差异。

PostgreSQL 15

1.public模式安全性提升

public模式的权限在15有如下修改:

  • public模式对public角色的create权限被回收
  • public模式owner变为pg_database_owner

如果要保持低版本的兼容性,可定制修改template1,还原对public角色的默认权限。

2.backup相关

  • 删除了pg_start_backup函数的exclusive参数(排他性备份模式可能会存在启动失败问题)
  • pg_start_backup重命名为pg_backup_start
  • pg_stop_backup重命名为pg_backup_stop
  • pg_backup_start_time函数被移除
  • pg_is_in_backup函数被移除

3.免密文件.pgpass

后台脚本如使用pg_dump进行备份时为了避免交互式输入数据库用户密码,可以使用.pgpass文件进行免密配置。

从15开始.pgpass文件加载顺序如下:

  • PGPASSFILE
  • $HOME/.pgpass (从15开始)
  • ~/.pgpass

如果root用户下$HOME变量设置为/,可能会造成脚本不能正常工作,因为多数操作系统root用户的$HOME变量是/root

PostgreSQL 16

1.备库提升为主库删除promote_trigger_file参数文件触发方式

从12开始,PG推荐使用pg_promote()函数或者使用pg_ctl promote命令来提升备库为主库。

原有的promote_trigger_file参数文件触发方式已被废弃使用。

2.vacuum_defer_cleanup_age参数被删除

该参数是预防流复制冲突的手段之一,但多数人都很难合理设置其大小,并且社区也有用户案例因设置值过大而引起数据损坏,从16开始PG删除了该参数。

3.lc_collate和lc_ctype参数被删除

数据库初始化时设置的lc_collate和lc_ctype参数后期是不能被修改,而且从16开始允许db级设置本地化参数,因此从16开始删除了这两个只读参数。

4.force_parallel_mode重命名为debug_parallel_query

一些用户会认为16之前的force_parallel_mode参数是开启并行查询的开关。但这并不准确,该参数只是提示优化器考虑使用并行,最终还会受成本评估的影响。为消除误解,16更名为debug_parallel_query。

5.归档参数archive_library与archive_command不能同时使用

从15开始,WAL归档引入了一种新的配置方式,可使用archive_library参数,并且archive_library与archive_command参数允许同时设置,archive_library参数会优先生效。

从16开始,不能同时配置archive_library与archive_command参数,否则数据库日志会出现提示信息。

最后修改时间:2023-12-20 11:12:44
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论