PostgreSQLでユーザ(Role)あたりのコネクション数を制限したい


はじめに

PostgreSQLでユーザ(Role)あたりのコネクション数を制限したいときは、ALTER ROLE ~ CONNECTION LIMIT N; を使いましょう。

(PostgresqlはユーザもRoleとして表現されます)

公式ドキュメントの記載箇所

サンプル

ユーザは shase-san というのを使っています。

ALTER ROLEの発行

ALTER ROLE shase-san CONNECTION LIMIT 5;

確認

foodb=> \du shase-san
                                 List of roles
  Role name   |  Attributes   |                    Member of
--------------+---------------+-------------------------------------------------
 shase-san    | 5 connections | {}

実際にpsqlコマンドで試した所、上記の場合5接続しかできなくなっています。

おまけ

特定ユーザの現在のコネクションをすべてkill

SELECT
  pg_terminate_backend(pid)
FROM
  pg_stat_activity
WHERE
  usename = 'shase-san'
AND
  pid <> pg_backend_pid();

おわりに

PostgreSQL の達人に教えてもらいました。感謝