PostgreSQL 为各种用例提供了一组丰富的管理功能。有控制参数的功能,有用于索引维护的功能,还有用于恢复和/或备份控制的功能,还有更多。在这篇文章中,我们将研究如何使用内置函数来设置和获取参数,而无需触及配置文件(或在集群、数据库和用户级别设置参数)。在接下来的文章中,我们将介绍 PostgreSQL 默认提供的各种其他功能。
如果要在会话级别设置参数,通常会使用“set”命令,例如:
postgres=# show work_mem;
work_mem
----------
4MB
(1 row)
postgres=# set work_mem='6MB';
SET
postgres=# show work_mem;
work_mem
----------
6MB
(1 row)
由于这是在会话级别,一旦创建新会话,将返回默认设置:
postgres=# \c postgres
You are now connected to database "postgres" as user "postgres".
postgres=# show work_mem;
work_mem
----------
4MB
(1 row)
对此要求的另一种可能性是使用内置的set_config函数:
postgres=# select set_config('work_mem','6MB',true);
set_config
------------
6MB
(1 row)
postgres=# show work_mem;
work_mem
----------
4MB
(1 row)
第三个参数指定作用域,在这种情况下作用域是事务。由于默认情况下 psql 会自动提交并且您不在事务中,因此您会立即回退到默认值。在显式事务中做同样的事情更清楚:
postgres=# begin;
BEGIN
postgres=*# select set_config('work_mem','6MB',true);
set_config
------------
6MB
(1 row)
postgres=*# show work_mem;
work_mem
----------
6MB
(1 row)
postgres=*# end;
COMMIT
postgres=# show work_mem;
work_mem
----------
4MB
(1 row)
如果要为整个会话的范围设置一个参数,只需切换第三个参数:
postgres=# select set_config('work_mem','6MB',false);
set_config
------------
6MB
(1 row)
postgres=# show work_mem ;
work_mem
----------
6MB
(1 row)
postgres=# \c postgres
You are now connected to database "postgres" as user "postgres".
postgres=# show work_mem ;
work_mem
----------
4MB
(1 row)
set_config 函数的反面是 current_setting:
postgres=# select current_setting('work_mem',false);
current_setting
-----------------
4MB
(1 row)
第二个参数的原因是,让您选择如果您要求一个不存在的参数会发生什么:
postgres=# select current_setting('work_memX',false);
ERROR: unrecognized configuration parameter "work_memX"
postgres=# select current_setting('work_memX',true);
current_setting
-----------------
(1 row)
根据您想要的行为,您将获得 NULL 或错误消息。
你可能会问自己:当我可以用set和show做同样的事情时,为什么我需要这些函数?答案很简单:函数可以很容易地在其他函数或过程中使用:
postgres=# \! cat a.sql
create or replace function f1() returns text as
$$
declare
lv text;
begin
select current_setting('work_mem')
into lv;
return lv;
end;
$$ language plpgsql;
postgres=# \i a.sql
CREATE FUNCTION
postgres=# select f1();
f1
-----
4MB
(1 row)
这使你可以在数据库中执行业务逻辑时灵活地请求和设置参数。
原文地址:https://blog.dbi-services.com/postgresql-set_config-and-current_setting/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




