本期内容如下:
- 基础备份与复制槽
- 语法兼容性差异
- psql默认权限展示问题
- standby支持逻辑复制的遗留问题
- 普通用户的最大连接数设置
- application_name带中文显示问题
一、基础备份与复制槽的问题
使用pg_basebackup备份时指定了"–slot",具体命令如下:
$ pg_basebackup -D /opt/postgres/data -U postgres -p 5432 -h x.x.x.x -Fp -Xs -R -P -v -c fast --slot=slot148
复制
由于主库并未提前创建相应的复制槽,但基础备份还是会继续执行拉取数据的流程,数据拉完后再提示slot的错误,为什么不先检测slot,如果不存在就直接报错退出,而需要浪费时间拉完数据再删除呢?
个人觉得这是一个可以优化的点,当前的流程是先拉取数据,拉取数据的过程中同时去接收WAL(stream模式),同时使用复制槽来预防备份过程中数据变化太快,可能导致WAL被回收。
不过pg_basebackup工具在stream模式其实缺省就使用了临时复制槽,我们可以打开log_replication_commands设置,对日志文件进行观察。
如果使用自定义的slot,需要我们提前创建,并且还需要注意及时删除,所以缺省的临时复制槽对我们更合适。
二、语法兼容性差异
版本14到15新发现一个语法兼容性差异问题,示例如下:
CREATE TABLE t(id int);
SELECT * FROM t WHERE(id =1010R id=102);
复制
上面的查询语句OR前面缺失空格,在15之前可以正常执行,从15版本开始会报错:
ERROR: trailing junk after numeric literal at or near "1010R"
LINE 1: SELECT * FROM t WHERE(id =1010R id=102);
^
复制
三、psql默认权限展示问题
17版本之前psql无法区分数据库对象owner有默认全部权限或权限被回收这两种场景,即将发布的17将解决这个显示问题,通过\pset命令对NULL定制化输出,可以更友好的展示
\pset null '(NULL)'
复制
对象的默认权限展示如下:
postgres=# \dn+ s1
List of schemas
Name | Owner | Access privileges | Description
------+----------+-------------------+-------------
s1 | postgres | (NULL) | (NULL)
(1 row)
复制
对象无权限时展示如下:
postgres=# \dn+ s1
List of schemas
Name | Owner | Access privileges | Description
------+----------+-------------------+-------------
s1 | postgres | (none) | (NULL)
(1 row)
复制
详细测试可以参考文章:<<默认权限"无法选中"?>>
四、standby支持逻辑复制的遗留问题
大表哥在这篇文章:Flink CDC 关于PG 16 standby logical decoding 的支持问题里介绍了Flink CDC 3.1.0通过升级Debezium组件的版本到1.9.8来支持从PG 16的standby节点捕获增量数据。
同时也发现了一个issue:16虽然支持从standby节点做逻辑复制,但还不支持使用pg_replication_origin_advance函数来快进跳过LSN,目前17也并未处理这个问题,使用standby进行解码需要注意这个限制。
五、普通用户的最大连接数如何设置
如果要设置普通用户连接数为100,那max_connections该设置成多少呢?
以当前最新稳定版本16为例,需要扣除以下两类连接数:
- 超级用户预留的连接数
superuser_reserved_connections = 3 - 普通用户带pg_use_reserved_connections角色的连接数
reserved_connections = 2
最终计算max_connections应该设置为105
六、客户端application_name配置带中文显示为问号
从pg_stat_activity视图查询application_name字段,配置的中文显示为问号(?),能正常显示为中文吗?
答案是否定的,application_name和cluster_name参数值只能配置为ASCII字符,官方文档里有明确说明:
https://www.postgresql.org/docs/15/runtime-config-logging.html
16版本有一点小的优化,非ASCII字符会显示为带转义符的hex格式
https://www.postgresql.org/docs/16/runtime-config-logging.html
下面是分别在15和16的对比测试
推荐阅读
- 数据库微观案例第45期
- 数据库微观案例第44期
- 数据库微观案例第43期
- 数据库微观案例第43期
- 数据库微观案例第42期
- 数据库微观案例第41期 |NULL值案例
- 数据库微观案例第40期
- PostgreSQL智慧碎片|微观案例 |宏观收获
- PostgreSQL小案例集|4月刊
与我联系
- 微信公众号:象楚之行
- 墨天轮:https://www.modb.pro/u/15675
- 微信:skypkmoon
勤耕细作,用心积微;静待花开,量变质成。