postgresql psql set default statement_timeout as a user in postgres

pcww981p  于 5个月前  发布在  PostgreSQL
关注(0)|答案(3)|浏览(56)

我想设置一个默认的statement_timeout来访问postgres数据库。在配置了我的环境变量之后,我现在有了它,psql将我记录在我首选的数据库和表上。然而,当我在其中浏览几个表时,我想有一个大约一分钟的语句超时。这可以通过在每个会话开始时键入SET statement_timeout TO '1min';来完成,但是每次输入都是令人讨厌的。我没有访问服务器配置的权限,也不想改变它。理想情况下,我可以做一些事情来达到alias psql='psql -c "SET statement_timeout TO '1min';"' except the-c` flag of psql doesn 't allow interactive input的效果。有没有什么好的解决方案来解决这个问题,或者我总是注定要为每个交互式会话手动设置超时?

3yhwsihp

3yhwsihp1#

您可以使用您的.psqlrc文件(如果您的主目录中没有,请创建它;如果您使用的是Windows而不是*nix,则文件为**%APPDATA%\postgresql\psqlrc.conf**)并设置以下命令:

set statement_timeout to 60000; commit;

字符串
该设置以毫秒为单位,因此将超时设置为1分钟。.psqlrc不用于-c-Xpsql的调用,因此这应该允许您将交互模式超时设置为1分钟。
然后,您可以在psql中执行以下操作以验证配置是否生效:

show statement_timeout;

ghg1uchk

ghg1uchk2#

Postgres允许您在每个角色(用户)级别上设置配置参数,例如statement_timeout。

ALTER ROLE <your-username> SET statement_timeout = '60s';

字符串
从下次登录开始,此更改将应用于该用户的所有新会话。
来源:Postgres docs

zbdgwd5y

zbdgwd5y3#

如果您使用的客户端在后台使用libpq(我认为大多数客户端都使用Java和.NET),则可以使用PGOPTIONS环境变量。

export PGOPTIONS="-c statement_timeout=7200000"

字符串
如果您使用URI类型的连接字符串,则可以以相同的格式向options URI参数添加选项,只要它们被正确地URI编码(百分比编码)即可。

psql "postgres://user:pass@server-hostname/db_name?options=-c%20statement_timeout%3D3600000


当使用关键字-值连接字符串时,可以指定如下选项(需要单引号)

psql "host=server-hostname user=user dbname=db_name options='-c statement_timeout=3600000'"


此外,连接服务文件(~/.pg_service.conf)可能很有用,并遵循与上述配置相同的约定。请参见https://www.postgresql.org/docs/current/libpq-pgservice.html

  • libpq环境变量https://www.postgresql.org/docs/8.1/libpq-envars.html
  • URI参数信息https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS
  • 关键字值文档https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-KEYWORD-VALUE

相关问题