[PostgreSQL]PostgreSQL のサーバー側で特定のDBのセッションを切断する方法

サーバー側でクエリの実行を中断するには SIGINT を当該プロセス( ps や pg_stat_activity から探す)に送ります(kill -INT PID)が、これではセッションは切断されません。メンテナンスなどで切断して欲しい場合には pg_terminate_backend(procpid) を使います。

特定のDBのセッションをすべてを強制的に切断するには以下のSQLで切断可能です。

PostgreSQL 9.2
[code lang=”sql”]
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = ‘DB名’
AND procpid <> pg_backend_pid() — 自分自身を切断しないように
;
[/code]

PostgreSQL 9.3 からは procpid ではなく pid に変わっているようなので、以下の手順で切断可能です。

PostgreSQL 9.3以降

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'DB名'
AND pid <> pg_backend_pid();

特定のユーザーなら usename で絞ります。

PostgreSQL 9.2

SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename = 'ユーザ名'
AND procpid <> pg_backend_pid() -- 自分自身を切断しないように
;

PostgreSQL 9.3以降

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE usename = 'ユーザ名'
AND pid <> pg_backend_pid();

切断後に再接続されたくない場合は pg_hba.conf で reject するようにしておきましょう。

[PostgreSQL]PostgreSQLのデータベースをコピーする方法

PostgreSQLのデータベースをコピーする。

[code lang=”sql”]createdb -T コピー元データベース名 コピー先(作成する)データベース名[/code]

公式マニュアルだと以下に掲載されています。
http://www.postgresql.jp/document/pg841doc/html/manage-ag-templatedbs.html

[Linux] 共有メモリ設定(shmmax & shmall) PostgreSQL8.3.1編

PostgreSQLでは共有メモリと呼ばれるものを使用しています。
デフォルトの設定で大概行けるのですが、制限に引っかかる可能性がある為、
しっかり計算して設定しておく方が無難です。

■必要な共有メモリ

設定値

計算式

max_connections 1800 + 270 × max_locks_per_transaction
autocacuum_max_works 1800 + 270 × max_locks_per_transaction
max_prepared_transactions 770 + 270 × max_locks_per_transaction
shared_buffers 8KBごとに8400バイト
wal_buffers 8KBごとに8200バイト
max_fsm_relations 70
max_fsm_pages 6
固定サイズ 770KB

設定はrootで行って下さい。
【設定例】

#expr 100 '*' 1024 '*' 1024 > /proc/sys/kernel/shmmax
#expr 100 '*' 1024 '*' 1024 > /proc/sys/kernel/shmall