PostgreSQLでデータベース内の全テーブルのオーナーを一括で変更する方法
私自身では全く思いつかなかったが、下記のサイトに良さそうな方法が書かれていた。
Modify OWNER on all tables simultaneously in Postgresql
http://stackoverflow.com/questions/1348126/modify-owner-on-all-tables-simultaneously-in-postgresqlSince you're changing the owner ship for all tables, you likely want views and sequences too. Here's what I did:
Tables:
for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" YOUR_DB` ; do psql -c "alter table $tbl owner to NEW_OWNER" YOUR_DB ; doneSequences:
for tbl in `psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" YOUR_DB` ; do psql -c "alter table $tbl owner to NEW_OWNER" YOUR_DB ; doneViews:
for tbl in `psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" YOUR_DB` ; do psql -c "alter table $tbl owner to NEW_OWNER" YOUR_DB ; done You could probably DRY that up a bit since the alter statements are identical for all three.answered Apr 21 '10 at 20:05
Alex Soto
上記の方法でうまくできるかどうか確認するために、私自身でLinux+PostgreSQL8.3の環境で試してみることにした。
※上記のコマンドのうち、以下の部分を変更した。
NEW_OWNER → nobuneko ※オーナー(owner)名
YOUR_DB → nobuneko_database ※データベース名
psql → /usr/local/postgresql8/bin/psql ※試したLinux環境ではpsqlのパス(path)が通っていなかったので、この環境でのpsqlのフルパスを指定して実行することにした。
テーブル:
for tbl in `/usr/local/postgresql8/bin/psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" nobuneko_database` ; do /usr/local/postgresql8/bin/psql -c "alter table $tbl owner to nobuneko" nobuneko_database ; done
シーケンス:
for tbl in `/usr/local/postgresql8/bin/psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" nobuneko_database` ; do /usr/local/postgresql8/bin/psql -c "alter table $tbl owner to nobuneko" nobuneko_database ; done
ビュー:
for tbl in `/usr/local/postgresql8/bin/psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" nobuneko_database` ; do /usr/local/postgresql8/bin/psql -c "alter table $tbl owner to nobuneko" nobuneko_database ; done
上記の各コマンドを、Linuxコンソールに張り付けて[Enter]キーで1つずつ実行したところ、3つとも成功した。
大変便利なコマンドだと思った。
Alex Soto氏に感謝。