在PostgreSQL中,如何查找哪个表使用特定的序列?

Joh*_*ohn 4 postgresql

我有一个名为seque_post的序列.

我需要找出它正在使用的表格.有没有办法编写一个会给出表名的查询?

我写了这个查询来查找序列:

select *
from pg_class
where relname like 'seque_post'
Run Code Online (Sandbox Code Playgroud)

那里有一个reltoastrelid根据手册给出的文件:

与此表关联的TOAST表的OID,如果没有,则为0.TOAST表在辅助表中存储"脱节"的大型属性.

但我不知道如何从这里继续..建议?

a_h*_*ame 8

要查找序列与"相关"的表,您可以使用以下内容:

select seq_ns.nspname as sequence_schema, 
       seq.relname as sequence_name,
       tab_ns.nspname as table_schema,
       tab.relname as related_table
from pg_class seq
  join pg_namespace seq_ns on seq.relnamespace = seq_ns.oid
  JOIN pg_depend d ON d.objid = seq.oid AND d.deptype = 'a' 
  JOIN pg_class tab ON d.objid = seq.oid AND d.refobjid = tab.oid
  JOIN pg_namespace tab_ns on tab.relnamespace = tab_ns.oid
where seq.relkind = 'S' 
  and seq.relname = '[your sequence name]'
  and seq_ns.nspname = 'public';
Run Code Online (Sandbox Code Playgroud)

只是为了完成图片:

反过来(查找列的序列)更容易,因为Postgres有一个函数来查找列的序列:

select pg_get_serial_sequence('public.some_table', 'some_column');
Run Code Online (Sandbox Code Playgroud)

  • 您可以修改第二种情况以获得更简单的解决方案:`SELECT attrelid :: regclass,attname FROM pg_attribute WHERE pg_get_serial_sequence(attrelid :: regclass :: text,attname)='public.seque_post'` (2认同)