如何在Postgres中获取序列名称列表?

liu*_*437 6 postgresql

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

在Oracle中,我可以使用:

select sequence_name 
from user_sequences
Run Code Online (Sandbox Code Playgroud)

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

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

a_h*_*ame 10

您可以使用:

select sequence_schema, sequence_name
from information_schema.sequences;
Run Code Online (Sandbox Code Playgroud)

这将返回当前用户可访问的序列列表,而不是他拥有的序列.

如果要列出您需要加入的当前用户拥有的序列pg_class,pg_namespace并且pg_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;
Run Code Online (Sandbox Code Playgroud)

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

手册中的更多细节:


Dun*_*ode 7

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