1

我在我的 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 不在结果集中。我使用创建序列的同一用户运行了两个查询。

任何人都可以帮我找到一个解释吗?

4

1 回答 1

1

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

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

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

于 2021-06-16T14:02:18.777 回答