序列存在,但我在 information_schema.sequences (PostgreSQL) 中找不到它

问题描述

我在我的 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 列的序列的情况。