aws dms - PostgreSQLデータベースへのアクティブな接続がある場合、PostgreSQLデータベースを削除する方法は?




5 Answers

PostgreSQL 9.2以降では、接続しているデータベースからセッションを除くすべての接続を切断します:

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname = current_database()
  AND pid <> pg_backend_pid();

古いバージョンでは同じですが、単にpidprocpid変更してprocpid 。 別のデータベースから切断するには、 current_database()をユーザーの接続を解除するデータベースの名前に変更します。

ユーザーを切断する前に、データベースのユーザーからCONNECT REVOKEREVOKEたい場合があります。そうしないと、ユーザーは再接続を続けるだけで、DBを削除することはできません。 このコメントとそれに関連する質問、 他のすべてのユーザーをデータベースからどのように切り離すのかを参照してください。

アイドル状態のユーザーを切断する場合は、 この質問を参照してください。

同期 使い方 ソース

私はPostgreSQLデータベースを削除するスクリプトを書く必要があります。 そこにはたくさんの接続があるかもしれませんが、スクリプトはそれを無視すべきです。

開いている接続がある場合、標準のDROP DATABASE db_nameクエリは機能しません。

どうすれば問題を解決できますか?




私はpostgres 9.2がprocpidではなくpidカラムを呼び出すことに気付きました。

私はシェルから呼び出す傾向があります:

#!/usr/bin/env bash
# kill all connections to the postgres server
if [ -n "$1" ] ; then
  where="where pg_stat_activity.datname = '$1'"
  echo "killing all connections to database '$1'"
else
  echo "killing all connections to database"
fi

cat <<-EOF | psql -U postgres -d postgres 
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
${where}
EOF

希望があれば助かります。 SQLの@JustBobに感謝します。




Linuxのコマンドプロンプトでは、まずこのコマンドを実行することによって実行されているすべてのpostgresqlプロセスを停止します。sudo /etc/init.d/postgresql restart

他のpostgresqlプロセスがまだ実行中かどうかを確認するコマンドbgを入力してください

その後dropdb dbnameを実行してデータベースを削除します。

sudo /etc/init.d/postgresql restart
bg
dropdb dbname

これは、Linuxのコマンドプロンプトで私のために働く




PostgreSQL 9.2以降:

SELECT pg_terminate_backend(pid)FROM pg_stat_activity WHERE datname = 'YOUR_DATABASE_NAME_HERE'




私の場合は、アクティブな管理者接続を含むすべての接続を削除するコマンドを実行する必要がありました

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname = current_database()

すべての接続を終了し、私に致命的な「エラー」メッセージを表示します。

FATAL: terminating connection due to administrator command SQL state: 57P01

その後、データベースを削除することができました




Related


Tags

postgresql