问题描述
我在我的 Postgresql(版本 13)数据库的架构(我们称之为 my_schema)中创建了一个序列(我们称之为 my_seq)。我确定序列存在,因为我可以在查询的结果集中找到它
select n.nspname as sequence_schema,c.relname as sequence_name
from pg_class c
join pg_namespace n on n.oid = c.relnamespace
where c.relkind = 'S'
and n.nspname = 'my_schema'
但是,如果我运行以下查询
select sequence_name
from information_schema.sequences
where sequence_schema = 'my_schema'
my_seq 不在结果集中。 我已经使用创建序列的同一用户运行了这两个查询。
有人能帮我找到解释吗?
解决方法
缺失的序列可能是 Identity
列中使用的序列。
您可以使用 select * from pg_sequences;
要回答问题的为什么:information_schema.sequences
是一个视图,您可以通过运行 \d+ information_schema.sequences
来查看它的定义。在那里,我们可以看到它过滤掉了 internal dependency (AND NOT (EXISTS ... AND pg_depend.deptype = 'i'
) 对象,这是支持 Identity 列的序列的情况。