私の知る限り、このクエリはシリアル列の新しい値の式を表示する必要があります。
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'
;
ほとんどの場合機能しますが、シーケンスの名前を変更しても、新しい名前はクエリの結果に反映されません。シーケンスの元の名前が引き続き表示されます。何かアイデアはありますか?
コメントでは、 a_horse_with_no_name が言っています:
GreenplumまたはPostgresを使用していますか? Postgresでは
pg_get_serial_sequence
を使用できます
あなたは見つけることができます ドキュメントはここにあります。
pg_get_serial_sequence
は、列に関連付けられているシーケンスの名前を返します。列に関連付けられているシーケンスがない場合は、NULLを返します。最初の入力パラメーターはオプションのスキーマを含むテーブル名で、2番目のパラメーターは列名です。最初のパラメーターはスキーマとテーブルになる可能性があるため、二重引用符で囲まれた識別子として扱われません。つまり、デフォルトでは小文字になります。一方、2番目のパラメーターは列名だけなので、二重引用符で囲まれて扱われます。保持されたケース。この関数は、シーケンス関数に渡すために適切にフォーマットされた値を返します( セクション9.16 を参照)。この関連付けは、ALTER SEQUENCE OWNED BY
を使用して変更または削除できます。 (この関数はおそらくpg_get_owned_sequence
と呼ばれるべきでした。現在の名前は、通常serial
またはbigserial
列で使用されるという事実を反映しています。)