postgresqlセッション/接続を終了する 質問する

postgresqlセッション/接続を終了する 質問する

すべての postgresql 接続を切断するにはどうすればよいですか?

試してみましたrake db:dropが、次のようになりました:

ERROR:  database "database_name" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

表示されるプロセスをシャットダウンしようとしましたps -ef | grep postgresが、これも機能しません。

kill: kill 2358 failed: operation not permitted

ベストアンサー1

使用できますpg_terminate_backend()接続を切断します。この機能を使用するにはスーパーユーザーである必要があります。これはすべてのオペレーティング システムで同じように動作します。

SELECT 
    pg_terminate_backend(pid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

このクエリを実行する前に、取り消す新しい接続を回避するための CONNECT 権限:

REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;

Postgres 8.4-9.1を使用している場合は、pidの代わりにprocpidを使用してください。

SELECT 
    pg_terminate_backend(procpid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    procpid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

おすすめ記事