複数テーブルにALTER TABLEとかの処理を実施しないといけない場合に楽する方法
今回は、テーブル数が多いDBのオーナーの変更依頼があって、手作業でやってられなかったのでちょっと工数削減を実施。
以下の内容で、スキーマとテーブル一覧の取得が出来ます。
SELECT SCHEMANAME || '.' || TABLENAME AS schema_tbl_name FROM PG_TABLES WHERE NOT TABLENAME LIKE 'pg%' AND NOT SCHEMANAME = 'information_schema' ORDER BY SCHEMANAME, TABLENAME
で、それをコマンドラインで実施。(PATHは各環境に合わせて下さい。)
/usr/local/pgsql/bin/psql -p 5432 -d dbname -c "SELECT SCHEMANAME || '.' || TABLENAME AS schema_tbl_name FROM PG_TABLES WHERE NOT TABLENAME LIKE 'pg%' AND NOT SCHEMANAME = 'information_schema' ORDER BY SCHEMANAME, TABLENAME;" > /home/postgres/work/table_list.txt
これで、テーブルリストを出力する。
テーブルリストは、最初と最後の行に余分なモノが出力されるので、それを削除。
schema_tbl_name ------------------------------------------ ・・・ (xxx rows)
for i in $(<table_list.txt ); do /usr/local/pgsql/bin/psql -p 5432 -d dbname -c "ALTER TABLE $i OWNER TO ownername;"; done
これで、複数テーブルに対してのALTERが実施できる。
なんとなく、もっといい方法もありそうなので、何かご存知でしたら、ご教授下さい。m(_ _)m