web-dev-qa-db-ja.com

postgresql-データベースを作成できません-OperationalError:他のユーザーがソースデータベース "template1"にアクセスしています

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

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

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

37
Andrius

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

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

--Use pid if PostgreSQL version 9.2 or above.

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

28
Andrius

データベース template1 は、別の空のデータベースを作成するためのベアボーン構造を提供するためにのみ存在します。 neverにログオンする必要がありますtemplate1、それ以外の場合は問題が発生します。

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

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

デフォルトでは、次のステートメント:

CREATE DATABASE dbname;

以下と同等です:

CREATE DATABASE dbname TEMPLATE template1;

template1は利用できないか破損しています。template0最後の手段として:

CREATE DATABASE dbname TEMPLATE template0;

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

34
mvp

これを解決するには、pgAdmin IIIからデータベース接続を切断する必要があります。

9
roxdurazo

ターミナルで現在のプロセススレッドを終了することもできます。

プロセスの検索:

Sudo ps aux | grep template1

プロセスを殺す:

Sudo kill -9 <プロセスID>

8

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

_SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
_

docs から:pg_backend_pid()は、現在のセッションにアタッチされたサーバープロセスのプロセスIDです。

2
Cloud Artisans

この問題は、template1およびtemplate0データベースに(psql template1またはpsql template)を記録し、以下のコマンドを使用して終了したときに発生します。

Ctrl + z

以下のpostgresコマンドを使用するdbからより良い方法が存在する場合、問題は発生しません。

\ q + Enter

問題がある場合、2つの解決策があります。

ソリューション-1

Posgresサービスを再起動します。

Sudoサービスのpostgresqlの再起動

ソリューション-2

須藤ps aux | grep template1

このプロセスを削除しないでください

postgres 8363 0.0 0.0 111760 7832 pts/11 T 09:49 0:00 /usr/lib/postgresql/9.5/bin/psql template1 ankit 18119 0.0 0.0 14224 976 pts/14 S + 12:33 0:00 grep --color =自動テンプレート1

プロセスの残りは、以下のコマンドを使用して強制終了する必要があります。

須藤キル-9

次に、dbを再度作成してみます。

これがお役に立てば幸いです。

アンキットHガンジー。

1

Windowsでは、PostgreSQLを再インストールする必要がありましたが、再起動は役に立ちませんでした。

0
Tomas Kubes