として有用であるinformation_schema.tables
が含まれます。
情報を表示する標準のSQL方法を提供するビューで構成されるinformation_schemaを照会することもできます。システムカタログの照会は、通常ははるかに高速です。
SELECT n.nspname AS schema_name
, c.relname AS table_name
, a.attname AS column_name
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_class c ON c.oid = a.attrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE a.attname ~~ E'%\\_parent'
AND NOT a.attisdropped
AND c.relkind = 'r'
AND nspname !~~ E'pg\\_%';
記述に従ってすべて関連の列を見つけるには:
SELECT n.nspname AS parrent_schema
, c.relname AS parrent_table
, a.attname AS parrent_column
, n1.nspname AS child_schema
, c1.relname AS child_table
, a1.attname AS child_column
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_class c ON c.oid = a.attrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a1 ON a.attname = substring(a1.attname, '_(.*?)$')
JOIN pg_catalog.pg_class c1 ON c1.oid = a1.attrelid
JOIN pg_catalog.pg_namespace n1 ON n1.oid = c1.relnamespace
WHERE c.relkind = 'r'
AND c1.relkind = 'r'
AND n.nspname !~~ E'pg\\_%'
AND n1.nspname !~~ E'pg\\_%'
AND NOT a.attisdropped
AND NOT a1.attisdropped
-- AND n.nspname = 'public' -- to narrow it down to a specific schema
-- AND n1.nspname = 'public' -- to narrow it down to a specific schema
ORDER BY 1,2,3,4,5,6
これはparrentの列が持っていないことを前提として一つの特定のparent
の列の子どもたちを見つけるのは
名前の_
。
a.attname = substring(a1.attname, '_(.*?)$')
'同様のPostgreSQLで動作information_schema.columns':
重要な要素は、結合条件です。 –
情報ありがとうございます。知っておいてよかった。 –
'%_parent 'やtable_catalog =' sat ';'のようなcolumn_nameのinformation_schema.columnsから 'select table_name、column_name'のようなことをして、私の問題を解決しました。ありがとう – nemesisfixx