合 PG 14新特性之ALTER TABLE DETACH 支持 CONCURRENTLY
Tags: PG新特性PG 14CONCURRENTLY
简介
担心ALTER TABLE DETACH因忘记设置statement_timeout
而长时间锁表吗? PostgreSQL 14支持CONCURRENTLY了, 完美解决烦恼。
在PG 14版本之前,执行alter table pt_table detach partition part_name;
命令会阻塞该分区表(及父表)的所有操作,包括SELECT操作,这是非常严重的。从PG14开始,加上CONCURRENTLY后,就不再阻塞其它会话了,只是其它会话会报错而已。
模拟过程:
1、新显式开启事务,插入一条数据,别提交
2、执行alter table pt_table detach partition part_name;
3、新开事务,做任何操作都哈卡住
在 PostgreSQL 中,statement_timeout
是一个会话级别的配置选项,用于设置在执行单个 SQL 语句时的超时时间。当执行的 SQL 语句运行时间超过指定的超时时间时,PostgreSQL 将中断该语句的执行并返回错误。
statement_timeout
参数的单位是毫秒(milliseconds),默认值为 0,表示禁用超时。如果设置了非零的值,它将应用于会话中的每个 SQL 语句,除非在执行语句时明确指定了其他超时值。
可以通过两种方式设置 statement_timeout
参数:
在 postgresql.conf
配置文件中全局设置:编辑 postgresql.conf
文件,找到 statement_timeout
参数并设置所需的超时值(以毫秒为单位)。修改后,需要重新启动 PostgreSQL 服务器才能使更改生效。