postgresql 如何列出Postgres中的所有参数?

ntjbwcob  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(4)|浏览(187)

我想知道是否有一个参数用于当前验证的psql用户?
但是我想知道一个更广泛的问题--我怎么能只看到所有的参数是什么?如果我能看到它们的整个列表,我可能会发现一些有趣的参数?
我只在网上看到如何得到一个参数的值。不是一个列表...

dw1jzc5e

dw1jzc5e1#

Alvaro已经回答了如何列出当前参数值的问题。
要获取经过身份验证的用户,可以调用SQL函数session_user

SELECT session_user;

当前有效的用户可通过查看

SELECT current_user;

psql中,可以使用查看当前数据库会话的详细信息

\conninfo
ktecyv1j

ktecyv1j2#

废话。试试下面两个SQL语句:

set foo.bar =42;

然后:

select current_setting('foo.bar');

你刚刚设置并读取了一个PostgreSQL文档似乎没有命名的实体。你可以称x.y为"用户定义的会话参数"。它的值保存在哪里?当然是服务器端。
我也想知道如何列出所有当前定义的实体的名称-系统定义的(如TimeZone)和用户定义的。

  • bryn@yugabyte.com
kokeuurv

kokeuurv3#

PostgreSQL没有像服务器端会话变量这样的东西,所以不清楚你在问什么。
一些PL(如PL/Python、PL/Perl)有会话变量(例如PL/Perl中的%_SHARED、PL/Python中的GDSD),但它们是PL内部的,而不是服务器本身的一部分。
psql也有变量,你可以用\set设置,你可以用同样的命令得到一个列表,我想这不是你想要的。
也许你指的是所谓的自定义GUC配置参数,它有时被滥用为会话变量,你可以得到一个使用SHOW ALLSELECT * FROM pg_catalog.pg_settings的配置参数列表。

y3bcpkx1

y3bcpkx14#

下面的SHOW ALL可以根据the documentation显示所有参数:

SHOW ALL;

SHOW ALL的工作原理如下:

postgres=# SHOW ALL;
            name            |   setting   |                                     description

----------------------------+-------------+------------------------------------------------------------------------------------------
 allow_in_place_tablespaces | off         | Allows tablespaces directly inside pg_tblspc, for testing.
 allow_system_table_mods    | off         | Allows modifications of the structure of system tables.
 application_name           | psql        | Sets the application name to be reported in statistics and logs.
 archive_cleanup_command    |             | Sets the shell command that will be executed at every restart point.
 archive_command            | (disabled)  | Sets the shell command that will be called to archive a WAL file.
 archive_mode               | off         | Allows archiving of WAL files using archive_command.
 archive_timeout            | 0           | Forces a switch to the next WAL file if a new file has not been started within N seconds.
 array_nulls                | on          | Enable input of NULL elements in arrays.
 authentication_timeout     | 1min        | Sets the maximum allowed time to complete client authentication.
 autovacuum                 | on          | Starts the autovacuum subprocess.
...

并且,您可以使用SHOW显示一个特定参数,如下所示:

postgres=# SHOW allow_in_place_tablespaces;
 allow_in_place_tablespaces
----------------------------
 off
(1 row)

但是,不能使用SHOW显示多个参数,如下所示:

postgres=# SHOW allow_in_place_tablespaces, allow_system_table_mods;
ERROR:  syntax error at or near ","
LINE 1: show allow_in_place_tablespaces, allow_system_table_mods;

因此,要显示多个参数,请使用下面的SELECT FROM pg_settings

postgres=# SELECT name, setting, short_desc FROM pg_settings WHERE name IN ('allow_in_place_tablespaces', 'allow_system_table_mods');
            name            | setting |                         short_desc
----------------------------+---------+------------------------------------------------------------
 allow_in_place_tablespaces | off     | Allows tablespaces directly inside pg_tblspc, for testing.
 allow_system_table_mods    | off     | Allows modifications of the structure of system tables.
(2 rows)

此外,current_setting()可以显示一个特定参数,如下所示:

postgres=# SELECT current_setting('allow_in_place_tablespaces');
 current_setting
-----------------
 off
(1 row)

但是,不能使用current_setting()显示多个参数,如下所示:

postgres=# SELECT current_setting('allow_in_place_tablespaces', 'allow_system_table_mods');
ERROR:  invalid input syntax for type boolean: "allow_system_table_mods"
LINE 1: ...ECT current_setting('allow_in_place_tablespaces', 'allow_sys...

相关问题