56

ソースデータベースtemplate1にログインしましたが、データベースを作成できません。データベースを作成しようとすると、次のエラーが発生します。

OperationalError: source database "template1" is being accessed by other users
DETAIL:  There are 5 other session(s) using the database.

template1にログインするたびに、「exit」コマンドを使用してログアウトしますが、ご覧のとおり、ログアウトせず、ログインするたびにセッション数が増加します。今ログインしているtemplate1へのすべての接続を強制的に切断する方法はありますか?

4

17 に答える 17

43

データベースtemplate1は、別の空のデータベースを作成するためのベアボーン構造を提供するためだけに存在します。にログオンしないでくださいtemplate1。そうしないと、問題が発生します。

おそらく最も簡単な解決策は、PostgreSQL サーバー プロセスを再起動し、再度ログオンすることです。常に存在し、ログオンしても安全なデータベースは ですpostgres

再起動できない場合は、別の緊急テンプレート データベースを使用できます: template0.

デフォルトでは、このステートメントは次のようになります。

CREATE DATABASE dbname;

次と同等です。

CREATE DATABASE dbname TEMPLATE template1;

template1が利用できないか破損している場合はtemplate0、最後の手段として使用できます。

CREATE DATABASE dbname TEMPLATE template0;

テンプレート データベースの詳細については、こちらをご覧ください。

于 2013-01-17T08:25:34.533 に答える
34

これは私の問題を解決するのに役立ちました:

SELECT *, pg_terminate_backend(procpid) 
FROM pg_stat_activity 
WHERE usename='username';

--Use pid if PostgreSQL version 9.2 or above.

template1 へのアクティブな接続をすべて終了し、データベースを正常に作成できました

于 2013-01-17T09:27:36.660 に答える
6

データベースに接続してさまざまな操作を実行するスクリプトがあり、他の誰もログインしていない必要があるものもあります。スクリプトの接続を終了するのではなく、他のすべての接続を終了するように @Andrius の回答を変更しました。

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();

ドキュメントから:pg_backend_pid()現在のセッションに接続されているサーバープロセスのプロセスIDです。

于 2018-03-22T00:44:33.533 に答える
-1

バックグラウンドで実行されている postgresql サービスの再起動を試みることができます。

于 2017-02-17T19:12:31.107 に答える