如何设置每个用户的语句超时?

Dha*_*ddy 8 postgresql configuration users query-timeout postgresql-11

我在 Postgres 中有多个用户。我想为不同的用户设置不同的语句超时。
例如:访客 5 分钟,管理员 10 分钟。

在 Postgres 11.11 中可以吗?

Erw*_*ter 15

是的,Postgres 允许每个用户甚至每个数据库和用户进行设置,包括statement_timeout

\n
ALTER ROLE foo SET statement_timeout = 12345;  -- milliseconds\n
Run Code Online (Sandbox Code Playgroud)\n

有关的:

\n\n

要查看会话当前活动的设置:

\n
SHOW statement_timeout;\n
Run Code Online (Sandbox Code Playgroud)\n

或者从视图中获取更多详细信息pg_settings(包括如何设置):

\n
SELECT *\nFROM   pg_settings\nWHERE  name = \'statement_timeout\';\n
Run Code Online (Sandbox Code Playgroud)\n

要检查角色的当前设置:

\n
SELECT rolname, rolconfig\nFROM   pg_roles\nWHERE  rolname = \'foo\';\n
Run Code Online (Sandbox Code Playgroud)\n

rolconfig是一个数组,取消嵌套以获得每行一个设置:

\n
SELECT rolname, unnest(rolconfig) AS setting\nFROM   pg_roles\nWHERE  rolname = \'foo\';\n
Run Code Online (Sandbox Code Playgroud)\n