是否可以生成包含角色时区的Postgresql角色列表?
我已经学习并测试了psql会话将采用登录时所用角色的时区。当然,我们可以使用以下方法将角色更改为特定时区:
# ALTER ROLE testUser SET timezone TO 'America/Chicago';
但是究竟该如何访问该信息以产生一个列表,以便可以检查所有角色?我尝试了\ du +,但是返回的信息非常有限。令人惊讶的是(无论如何对我来说)information_schema似乎不包含时区值。到目前为止,互联网搜索对这一任务没有帮助。
我还能在哪里尝试?
答案 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