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

4

我在我的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'

我的序列未出现在结果集中。我已经使用创建序列的相同用户运行了两个查询。

有人能帮我找到这个问题的解释吗?

1个回答

5
缺失的序列很可能是在“Identity”列中使用的序列。
您可以使用“select * from pg_sequences;”获取所有序列。
回答问题的原因:“information_schema.sequences”是一个视图,您可以通过运行“\d+ information_schema.sequences”来查看其定义。在那里,我们可以看到它过滤掉了作为内部依赖项(“AND NOT(EXISTS ... AND pg_depend.deptype ='i'”)的对象,这是支持Identity列的序列的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接