🐘
PostgreSQL 17でのロールに関する変更点
はじめに
本記事では、PostgreSQL 17でのロールに関する変更点を紹介したいと思います。
PostgreSQL 16のときもロールに関する変更点を調べましたが、かなり多くの変更点がありました。一方で、PostgreQL 17の変更点は少ない印象です。
この記事で紹介する機能は正式リリースまでの間に変更となる可能性があることにご注意ください。
動作環境
- Rocky Linux 9.1
- PostgreSQL 17devel (
f69319f2f1fb16eda4b535bcccec90dff3a6795e
)
紹介する機能
-
pg_maintain
定義済みロールの追加 -
pg_monitor
定義済みロールのメンバはデフォルトでpg_current_logfile()
を実行可能に
pg_maintain
定義済みロールの追加
この機能はPostgreSQL 16で新機能として一度取り込まれたのですが、権限昇格のバグがあったためRevertされてしまいました。そのバグを修正したうえで改めてPostgreSQL 17に取り込まれることになりました。
pg_maintain
を付与すると、全リレーションに対してメンテンス系のコマンド(VACUUM, ANALYZE, REINDEX, REFRESH MATERIALIZE VIEW, CLUSTER, LOCK TABLE)を実行することができるようになります。
pg_maintainのメンバシップをもたない場合
=# CREATE ROLE not_has_pg_maintain ;
CREATE ROLE
=# SET ROLE not_has_pg_maintain ;
SET
=> VACUUM ;
WARNING: permission denied to vacuum "pg_statistic", skipping it
WARNING: permission denied to vacuum "pg_type", skipping it
WARNING: permission denied to vacuum "pg_foreign_table", skipping it
WARNING: permission denied to vacuum "pg_authid", skipping it
WARNING: permission denied to vacuum "pg_statistic_ext_data", skipping it
~snip~
WARNING: permission denied to vacuum "sql_sizing", skipping it
VACUUM
pg_maintainのメンバシップをもつ場合
=# CREATE ROLE has_pg_maintain IN ROLE pg_maintain ;
CREATE ROLE
=> SET ROLE has_pg_maintain ;
SET
=> VACUUM ;
VACUUM
pg_monitor
定義済みロールのメンバはデフォルトでpg_current_logfile()
を実行可能に
これはタイトルのままですね。
pg_monitorのメンバシップをもたない場合
=# CREATE ROLE not_has_pg_monitor ;
CREATE ROLE
=# SET ROLE not_has_pg_monitor ;
SET
=> SELECT pg_current_logfile() ;
ERROR: permission denied for function pg_current_logfile
pg_monitorのメンバシップをもつ場合
=# CREATE ROLE has_pg_monitor IN ROLE pg_monitor ;
CREATE ROLE
=> SET ROLE has_pg_monitor ;
SET
=> SELECT pg_current_logfile() ;
pg_current_logfile
--------------------------------------
log/postgresql-2024-03-20_110627.csv
(1 row)
Discussion