備忘録(PostgreSQLで様々な一覧を取得)
今回の記事はPostgreSQLのよく使うわりにいつも調べているSQLの一覧について
備忘録として記載します。
テーブル一覧
select relname as TABLE_NAME from pg_stat_user_tables
テーブルとカラム一覧
select cl.* from information_schema.columns cl inner join pg_stat_user_tables ut on cl.table_name = ut.relname order by ordinal_position;
外部キーの一覧を取得するSQL
SELECT tc.constraint_name, tc.table_name, kcu.column_name, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name FROM information_schema.table_constraints tc INNER JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name INNER JOIN information_schesema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name WHERE tc.constraint_type = 'FOREIGN KEY'
ログインユーザーのテーブル、カラムの一覧および
主キー及び外部キーの情報一覧
SELECT cl.table_name, cl.column_name, fk.constraint_name, fk.foreign_table_name, fk.foreign_column_name, fk.constraint_type FROM information_schema.columns cl INNER JOIN pg_stat_user_tables ut ON ut.relname = cl.table_name LEFT OUTER JOIN (SELECT tc.constraint_name, tc.table_name, kcu.column_name, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name, tc.constraint_type FROM information_schema.table_constraints tc INNER JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name INNER JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name WHERE tc.constraint_type IN ('FOREIGN KEY','PRIMARY KEY')) fk ON fk.table_name = cl.table_name AND fk.column_name = cl.column_name ORDER BY cl.table_name, cl.ordinal_position;
なにか間違いやもっといい書き方等あれば教えていただけると有り難いです。