如何获取Postgres中的序列名列表?

时间:2016-07-05 02:25:43

标签: postgresql

我想获得Postgres中的序列名列表。

在Oracle中,我可以使用:

select sequence_name 
from user_sequences

但是在Postgres中,当我使用该语句时,它总是会抛出错误:找不到user_sequences

我怎样才能在Postgres中做到这一点?

2 个答案:

答案 0 :(得分:7)

您可以使用:

select sequence_schema, sequence_name
from information_schema.sequences;

这将向当前用户返回 accessible 的序列列表,而不是拥有的序列。

如果您想列出当前用户拥有的序列,您需要加入pg_classpg_namespacepg_user

select n.nspname as sequence_schema, 
       c.relname as sequence_name,
       u.usename as owner
from pg_class c 
  join pg_namespace n on n.oid = c.relnamespace
  join pg_user u on u.usesysid = c.relowner
where c.relkind = 'S'
  and u.usename = current_user;

在Postgres中,用户可以拥有多个模式中的对象(例如序列),而不仅仅是“他自己的”,因此您还需要检查序列的创建方式。

手册中的更多细节:

答案 1 :(得分:4)

SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';
或者尝试将psql作为psql -U username -E运行,然后运行\ds。这将显示用于生成结果的查询。