複数テーブルに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