PostgreSQL-データベースの名前を変更


126

データベースの名前を変更する必要がありますが、変更すると変更 PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld"できないことがわかりました。

どうすればできますか?

WindowsXPのバージョン8.3

更新

  • 最初のエラーメッセージ:接続していたためできません。そこで、他のデータベースを選択してクエリを実行しました。

  • ユーザーが接続したことを通知する2番目のエラーメッセージが表示されます。PGAdmin画面にはたくさんありますPIDがアクティブではありません。どうやって殺すかわかりません。


1
なぜそれができないのかについて詳しく説明できます。私はそれを(別のプラットフォームでも)実行しただけで、うまく
いき

1
正確なエラーメッセージは何ですか?このエラーをpostgresのドキュメントで調べましたか?多分その振る舞いには完全な理由があります。通常、名前の変更は機能するはずです。
ユネキシスト

更新された質問を参照してください
Patrick Desjardins

なぜデータベースを再起動しないのですか?
ユネキシスト

正確なエラーメッセージは何ですか?このエラーをpostgresのドキュメントで調べましたか?多分その振る舞いには完全な理由があります。通常、名前の変更は機能するはずです。保留中または停止中の接続に問題がある場合は、データベースを再起動してそれらを削除してください。
ユネキシスト

回答:


189

データベース名を引用しないでください:

ALTER DATABASE people RENAME TO customers;

また、その時点でデータベースに接続している他のクライアントがないことも確認してください。最後に、返されたエラーメッセージを投稿して、もう少し情報を取得してみてください。


18
名前に大文字が含まれている場合は、引用符が必要です。
Patrick Desjardins、

7
これはそうではありませんが、名前に.またはがある場合は引用符も必要です@
omar

6
名前に「-

上記の提案は、テーブル名を小文字アンダースコアのみに制限することをお勧めします(可能な場合)。
アスウィンサナカン

名前に空のスペースが含まれている場合も引用符が必要です
ローダー、

86

今後の参考のために、次のことができるようになります。

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";

そのテーブルに注意してください pg_stat_activity列のpid名前はprocpid、9.2より前のバージョンと同じで。したがって、PostgreSQLのバージョンが9.2より低い場合は、のprocpid代わりにを使用してくださいpid


3
それは私のために働いた、ありがとう!しかし、pg_stat_activityの列名はpidであり、procpidではありません。(PostgreSQL 9.3.5 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit
bodman、2015

7

私はこれに遭遇しました、そして以下がうまくいったものです:

1)pgAdminはセッションの1つです。psql代わりに使用してください。
2)pgBouncerWindowsでスケジューラサービスを停止します。これらもセッションを作成するためです。


3

Unexistはコメントで私にデータベースを再起動するように言いました、そしてそれは機能します!データベースを再起動すると、既存の接続がすべて終了し、他のデータベースに接続して、最初のクエリで名前を変更することができました。

すべてのThx。


3

核を配備する(サーバーを再起動する)代わりに、問題のある接続をどこから見つけてクライアントプロセスをシャットダウンするか、pg_cancel_backend()関数を使用して、接続を閉じようとする必要があります。


0

DBeaverを使用してこの問題が発生し、次のようなエラーメッセージが表示された場合:

ERROR: database "my_stubborn_db" is being accessed by other users
  Detail: There is 1 other session using the database.

現在の接続を切断し、名前を変更するデータベースを対象としない接続で同じサーバーに再接続します。

アクティブなデータベースを変更するだけでは不十分です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.