列出PostgreSQL中模式的所有非生成序列

Axe*_*ine 3 sql postgresql sequences

在PostgreSQL中有两种类型的序列:

  • 用户使用CREATE SEQUENCE创建的序列
  • DB生成的序列,用于支持SERIAL类型的列

INFORMATION_SCHEMA.SEQUENCES返回两种类型的序列.

什么SQL语句可以获取用户创建序列列表(没有由DB生成的序列)用于特定模式?

PS:我正在使用PostgreSQL 9

a_h*_*ame 5

对于生成的序列,将自动定义"拥有"列,以便可以作为区分因素.

但这也可以手动完成,所以没有办法区分:

create table foo (
   id_col serial not null
);
Run Code Online (Sandbox Code Playgroud)

create table foo (
   id_col integer not null
);
create sequence foo_id_col_seq owned by foo.id_col;
Run Code Online (Sandbox Code Playgroud)


但是,如果您可以,那么以下声明可以为您提供以下信息:

SELECT s.relname as sequence_name,  
       t.relname as related_table, 
       a.attname as related_column,
       d.deptype
FROM pg_class s 
   JOIN pg_depend d ON d.objid = s.oid 
   LEFT JOIN pg_class t ON d.refobjid = t.oid 
   LEFT JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum) 
WHERE s.relkind = 'S';
Run Code Online (Sandbox Code Playgroud)

您将通过该查询为每个序列至少获得一行:对其创建的架构的依赖性.

对于列所拥有的序列,您将获得另一行,其中包含它所属的表和列.