如何获取序列列的序列名称

Phi*_*bbs 6 postgresql sequence greenplum

据我所知,此查询应显示串行列的新值的表达式:

select d.adsrc
from (
 SELECT a.attrelid, a.attnum, n.nspname, c.relname, a.attname
 FROM pg_catalog.pg_attribute a, pg_namespace n, pg_class c
 WHERE a.attnum > 0
 AND NOT a.attisdropped
 AND a.attrelid = c.oid
 and c.relkind not in ('S','v')
 and c.relnamespace = n.oid
 and n.nspname not in ('pg_catalog','pg_toast','information_schema')
) x
left join pg_attrdef d on d.adrelid = x.attrelid and d.adnum = x.attnum
where x.relname = 'table_name' and x.nspname = 'schema_name' and x.attname = 'column_name'
;
Run Code Online (Sandbox Code Playgroud)

它大部分时间都有效,但如果我重命名序列,新名称不会反映在查询结果中 - 它继续显示序列的原始名称。任何想法为什么?

Eva*_*oll 6

在评论中,a_horse_with_no_name说:

您使用的是 Greenplum 还是 Postgres?在 Postgres 中,您可以使用pg_get_serial_sequence

您可以在此处找到文档。

pg_get_serial_sequence返回与列关联的序列的名称,如果没有与列关联的序列,则返回 NULL。第一个输入参数是一个带有可选模式的表名,第二个参数是一个列名。因为第一个参数可能是模式和表,所以它不被视为双引号标识符,这意味着默认情况下它是小写的,而第二个参数,只是一个列名,被视为双引号并具有案例保存。该函数返回一个适合传递给序列函数的格式的值(参见第 9.16 节)。可以使用 修改或删除此关联ALTER SEQUENCE OWNED BY。(该函数可能应该被调用pg_get_owned_sequence;它的当前名称反映了它通常与serialbigserial列一起使用的事实。)