我想获得Postgres中的序列名列表。
在Oracle中,我可以使用:
select sequence_name
from user_sequences
但是在Postgres中,当我使用该语句时,它总是会抛出错误:找不到user_sequences 。
我怎样才能在Postgres中做到这一点?
答案 0 :(得分:7)
您可以使用:
select sequence_schema, sequence_name
from information_schema.sequences;
这将向当前用户返回 accessible 的序列列表,而不是拥有的序列。
如果您想列出当前用户拥有的序列,您需要加入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;
在Postgres中,用户可以拥有多个模式中的对象(例如序列),而不仅仅是“他自己的”,因此您还需要检查序列的创建方式。
手册中的更多细节:
答案 1 :(得分:4)
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';
或者尝试将psql作为psql -U username -E
运行,然后运行\ds
。这将显示用于生成结果的查询。