テーブルとビューの一覧を得る
current_schema()
はしばしば 'public'
だと思いますが、適宜置き換えてください。
テーブルの一覧を得る(見るだけなら \dt
でもよい)
SELECT table_name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type='BASE TABLE';
ビューの一覧を得る
SELECT table_name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type = 'VIEW';
-- もしくは
SELECT table_name FROM information_schema.views WHERE table_catalog = current_database() AND table_schema = current_schema();
テーブルとビューの一覧を得る
SELECT table_name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type IN ('BASE TABLE', 'VIEW');
追記: 最初はtabale_typeを無視していたが、BASE TABLEとVIEWだけではないので、ちゃんと設定したほうが良さそう。 refs: 第37章 情報スキーマ - PostgreSQL 11.5文書
おまけ:テーブルorビューの定義を見る(SELECTするカラム名を覗きたいとき)
\d テーブル名
テーブル名やビュー名を1行づつ処理したい
psql
の-A -t
オプションをつけると、パイプで繋いでコマンドで処理できます。雑に権限つけたいときなど。
DATABASE=データベース名
ROLENAME=ロール名
psql -U postgres -d $DATABASE -A -t -c "SELECT table_name FROM information_schema.tables WHERE table_schema='public'" \
| xargs -I{} psql -U postgres -d $DATABASE -c "GRANT ALL ON {} TO $ROLENAME"