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

PostgreSQL 参数优先级讲解

digoal 2019-01-30
1169

作者

digoal

日期

2019-01-30

标签

PostgreSQL , 参数 , 优先级 , 配置文件 , alter system , 命令行 , 用户 , 数据库 , 所有用户 , 会话 , 事务 , 函数 , 表


背景

PostgreSQL 参数配置包罗万象,可以在配置文件 , alter system , 命令行 , 用户 , 数据库 , 所有用户 , 会话 , 事务 , 函数 , 表 等层面进行配置,非常的灵活。

灵活是好,但是可配置的入口太多了,优先级如何?如果在多个入口配置了同一个参数的不同值,最后会以哪个为准?

参数优先级

优先级如下,数值越大,优先级越高。

1 postgresql.conf

work_mem=1MB

2 postgresql.auto.conf

work_mem=2MB

3 command line options

```
work_mem=3MB

pg_ctl start -o "-c work_mem='3MB'"
```

4 all role

```
work_mem=4MB

alter role all set work_mem='4MB';
```

5 database

```
work_mem=5MB

alter database postgres set work_mem='5MB';
```

6 role

```
work_mem=6MB

alter role digoal set work_mem='6MB';
```

7 session (客户端参数)

```
work_mem=7MB

set work_mem ='7MB';
```

8 事务

```
work_mem=8MB

postgres=# begin;
BEGIN
postgres=# set local work_mem='8MB';
SET
```

9 function

(参数在函数内有效,函数调用完成后依旧使用其他最高优先级参数值)

```
work_mem=9MB

postgres=# create or replace function f_test() returns void as $$
declare
res text;
begin
show work_mem into res;
raise notice '%', res;
end;
$$ language plpgsql strict set work_mem='9MB';
CREATE FUNCTION

postgres=# select f_test();
NOTICE: 9MB
f_test


(1 row)
```

10 table

TABLE相关参数(垃圾回收相关)

https://www.postgresql.org/docs/11/sql-createtable.html

```
autovacuum_enabled

toast.autovacuum_enabled

... ...

autovacuum_vacuum_threshold

toast.autovacuum_vacuum_threshold

... ...
```

小结

PostgreSQL 支持的配置入口:

```
配置文件(postgresql.conf) ,

alter system(postgresql.auto.conf) ,

命令行(postgres -o, pg_ctl -o) ,

所有用户(alter role all set) ,

数据库(alter database xxx set) ,

用户(alter role 用户名 set) ,

会话(set xxx) ,

事务(set local xxx;) ,

函数(create or replace function .... set par=val;) ,

表(表级垃圾回收相关参数)
```

如果一个参数在所有入口都配置过,优先级如上,从上到下,优先级越来越大。

参考

《PostgreSQL GUC 参数级别介绍》

《连接PostgreSQL时,如何指定参数》

https://www.postgresql.org/docs/11/sql-createtable.html

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论