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

jPe*_*nF5 6 postgresql database-sequence

我已经在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'
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行以下查询

select sequence_name 
from information_schema.sequences 
where sequence_schema = 'my_schema'
Run Code Online (Sandbox Code Playgroud)

my_seq 不在结果集中。我已使用创建序列的同一用户运行这两个查询。

有人能帮我找到一个解释吗?

JGH*_*JGH 7

缺失的序列可能是Identity列中使用的序列。

您可以使用获取所有序列select * from pg_sequences;

要回答这个问题的原因information_schema.sequences:是一个视图,您可以通过运行来查看它的定义\d+ information_schema.sequences。在那里,我们可以看到它过滤掉了内部依赖项( AND NOT (EXISTS ... AND pg_depend.deptype = 'i') 的对象,这是支持 Identity 列的序列的情况。