PostgreSQLでデータベース内の全テーブルのオーナーを一括で変更する方法

私自身では全く思いつかなかったが、下記のサイトに良さそうな方法が書かれていた。

Modify OWNER on all tables simultaneously in Postgresql
http://stackoverflow.com/questions/1348126/modify-owner-on-all-tables-simultaneously-in-postgresql

Since 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 ; done

Sequences:
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 ; done

Views:
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氏に感謝。

前へ

セブンイレブンで「神奈川牛乳のみるくぷりん」を買って食べる

次へ

大桟橋バス停前の街灯に「コクリコ坂から」の国際信号旗が掲げられていた (神奈川県横浜市中区)