ソースデータベースtemplate1にログインしましたが、データベースを作成できません。データベースを作成しようとすると、次のエラーが表示されます。
OperationalError: source database "template1" is being accessed by other users
DETAIL: There are 5 other session(s) using the database.
Template1にログインするたびに、「exit」コマンドを使用してログアウトしますが、ご覧のように、ログアウトせず、ログインするたびにセッション数が増加します。現在ログインしているtemplate1へのすべての接続を強制的に切断する方法はありますか?
これは私の問題を解決するのに役立ちました:
SELECT *, pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename='username';
--Use pid if PostgreSQL version 9.2 or above.
Template1へのすべてのアクティブな接続を終了し、データベースを正常に作成できました
データベース template1
は、別の空のデータベースを作成するためのベアボーン構造を提供するためにのみ存在します。 neverにログオンする必要がありますtemplate1
、それ以外の場合は問題が発生します。
おそらく最も簡単な解決策は、PostgreSQLサーバープロセスを再起動し、再度ログオンすることです。常に存在し、ログオンしても安全なデータベースはpostgres
です。
再起動がオプションではない場合、別の緊急テンプレートデータベースを使用できます:template0
。
デフォルトでは、次のステートメント:
CREATE DATABASE dbname;
以下と同等です:
CREATE DATABASE dbname TEMPLATE template1;
template1
は利用できないか破損しています。template0
最後の手段として:
CREATE DATABASE dbname TEMPLATE template0;
テンプレートデータベースの詳細については、こちらをご覧ください こちら 。
これを解決するには、pgAdmin IIIからデータベース接続を切断する必要があります。
ターミナルで現在のプロセススレッドを終了することもできます。
プロセスの検索:
Sudo ps aux | grep template1
プロセスを殺す:
Sudo kill -9 <プロセスID>
データベースに接続してさまざまな操作を実行するスクリプトがあります。他の人がログインする必要はありません。@ Andriusの回答を変更して、スクリプトの接続を終了せず、他のすべての人を終了します。
_SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
_
docs から:pg_backend_pid()
は、現在のセッションにアタッチされたサーバープロセスのプロセスIDです。
この問題は、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ガンジー。
Windowsでは、PostgreSQLを再インストールする必要がありましたが、再起動は役に立ちませんでした。