本番稼働中のDBで、一時的に参照のみ可能としたいことがたまにある。
Oracleでは読み取り専用モードなるものが存在して、表領域やテーブル単位で読み取り専用にすることが可能であるが、PostgreSQLの場合は?
select以外の権限を剥奪する?いやいや面倒くさいです(笑)
調べてみたが意外とこの情報が見つからない。
無停止のシステムで新DBに移行を行う時など、旧DBを参照のみさせたい場合など必要な場面は多々あると思うが、世の中のDBAの方々は実際の運用ではどのように対応しているのだろうか?
結論から言えば、ポスグレの場合は、インスタンス、DB、ユーザ単位で参照モードに設定することが可能だ。
また設定の変更は再起動無しで動的に可能である。
インスタンスの場合
postgresql.confの default_transaction_read_only をoffにしてpg_ctl でreloadする。
DB指定の場合
alter database データベース名 set default_transaction_read_only = on;
ユーザ指定の場合
alter user ユーザ名 set default_transaction_read_only = on;
いずれも即時に設定が反映される。
戻す場合は、onをoffにして実行すれば戻る。
注意点としては、設定変更時に既に接続が確立しているセッションは、その接続は変更が有効にならず、接続し直す必要がある。?
photo by Brittany H.