是否可以在角色列表中包含时区?

时间:2019-04-15 23:26:20

标签: postgresql psql

是否可以生成包含角色时区的Postgresql角色列表?

我已经学习并测试了psql会话将采用登录时所用角色的时区。当然,我们可以使用以下方法将角色更改为特定时区:

# ALTER ROLE testUser SET timezone TO 'America/Chicago';

但是究竟该如何访问该信息以产生一个列表,以便可以检查所有角色?我尝试了\ du +,但是返回的信息非常有限。令人惊讶的是(无论如何对我来说)information_schema似乎不包含时区值。到目前为止,互联网搜索对这一任务没有帮助。

我还能在哪里尝试?

1 个答案:

答案 0 :(得分:3)

可以从pg_db_role_setting检索角色的设置,它是text[]的{​​{1}}数组。因此,这需要一个<setting name>=<setting value>和一个unnest()才能到达各个组件。此外,由于可以为特定数据库设置设置(请参见split_part()命令的IN DATABASE选项),因此我们需要包含ALTER ROLE中的数据库。我们将他们与pg_database中的所有角色交叉加入。为了也包括未绑定到数据库但对于所有数据库均有效的设置,我们pg_authid将一个空数据库(其OID为零)添加到数据库列表中。这样我们就可以退出角色设置了。

因此,以下内容将为您提供所有数据库(包括“ all”或“ none”数据库)和所有角色的UNION ALL设置的值;如果未设置timezone,则为null数据库中的用户。

timezone