我想获得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中,用户可以拥有多个模式中的对象(例如序列),而不仅仅是"他自己的",因此您还需要检查序列的创建方式.
手册中的更多细节:
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';
或尝试运行psql,psql -U username -E然后再运行\ds。这也将向您显示用于生成结果的查询。