Postgres で現在接続しているデータベースを削除しようとすると、次のエラーが発生する場合があります:
pq: cannot drop the currently open database
このエラーは、データベースを削除するには、削除するデータベースへの閉じられた接続が必要であるために発生します。混乱の原因は、接続が閉じられている場合、dbConn.Exec を使用して DROP DATABASE を実行できないことです。
現在接続されているデータベースを削除するための推奨されるアプローチは、別のデータベースに接続し、そこから DROP DATABASE コマンドを実行します。これは、削除されるデータベースへの接続が削除時に無効になるためです。
例:
import "github.com/lib/pq" ... func dropDatabase(dbName string) error { // Connect to a different database (e.g., template1) otherConn, err := pq.Open("other_conn_string") if err != nil { return err } defer otherConn.Close() // Drop the desired database from the other connection _, err = otherConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName)) return err }
削除されるデータベースに別のクライアントが接続されており、緊急の削除が必要な場合は、次のコマンドを使用してターゲット データベースからすべてのクライアントを強制的に切断できます (要件は PostgreSQL のバージョンによって異なります):
-- PostgreSQL < 9.2 SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb'; -- PostgreSQL >= 9.2 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
注: これらのコマンドはスーパーユーザー権限で実行してください。クライアントが強制的に切断されると、別のデータベースに接続して DROP DATABASE コマンドを実行できます。
以上が現在接続されている PostgreSQL データベースを削除するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。