PostgreSQL9.5:ALTER TABLE .. SET LOGGED / UNLOGGED

9.5 版本之前 PG 已经支持 UNLOGGED 表,UNLOGGED 由于不会记录 WAL 日志,在加载速度上会快些,当实例异常 crash 时会丢失数据,9.5 版本新特性支持日志表和非日志表的切换。以下在流复制环境测试。

主库: 创建一张 Unlogged 表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[pg95@db2 ~]$ psql fdb fdb  
psql (9.5alpha1)
Type "help" for help.

fdb=> select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)

fdb=> create unlogged table test_log(id serial primary key,message text);
CREATE TABLE

fdb=> insert into test_log (id,message) select generate_series(1,1000),'message';
INSERT 0 1000

fdb=> select relname,relpersistence from pg_class where relname='test_log';
relname | relpersistence
----------+----------------
test_log | u
(1 row)

备库操作: 查询 Unlogged 表

1
2
3
4
5
6
7
8
9
10
11
12
[pg95@db1 ~]$ psql fdb fdb  
psql (9.5alpha1)
Type "help" for help.

fdb=> select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)

fdb=> select count(*) from test_log;
ERROR:cannot access temporary or unlogged relations during recovery

备注:备库上不允许查询 unlogged 表,unlogged 表不会产生 WAL ,数据也不会复制到备节点。

主库操作: 将表 test_log 修改成 logged 表

1
2
3
4
5
6
7
8
fdb=> alter table test_log set logged;  
ALTER TABLE

fdb=> select relname,relpersistence from pg_class where relname='test_log';
relname | relpersistence
----------+----------------
test_log | p
(1 row)

备库操作: 查询成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[pg95@db1 ~]$ psql fdb fdb  
psql (9.5alpha1)
Type "help" for help.

fdb=> select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)

fdb=> select count(*) from test_log;
count
-------
1000
(1 row)

参考

原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/239632.html

(0)
上一篇 2022年2月12日
下一篇 2022年2月12日

相关推荐

发表回复

登录后才能评论