Postgres のメタデータ テーブル (システム カタログ) を使用してクエリを作成し、必要な情報を取得しています。pg_constraint
カタログには、 というタイプの列がありconkey
、int2[]
を参照しています。pg_attribute
.attnum
私の質問は、システム カタログ自体に関するものではなく、このint2[]
配列を実際の列名の配列に拡張する方法に関するものです。例えば:
a) pg_constraint:
conname | conrelid | conkey
const1 | 123 | {2, 3}
b) pg_class:
oid | relname
123 | table1
c) pg_attribute:
attrelid | attname | attnum
123 | colA | 1
123 | colB | 2
123 | colC | 3
const_columns
以下のように期待される結果を得るにはどうすればよいですか?
pseudo-query:
select b.relname as table, a.conname as constraint,
/******> a.conkey expanded to c.attname <******/ as const_columns
from pg_constraint a, pg_class b, pg_attribute c
where a.conrelid = b.oid
and c.attrelid = b.oid
and a.conkey = c.attnum;
expected result:
table | constraint | const_columns
table1 | const1 | {colB, colC}