ホームページ >バックエンド開発 >Golang >Postgres で開いているデータベースを削除できないのはなぜですか?

Postgres で開いているデータベースを削除できないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-19 10:28:02497ブラウズ

Why Can't I Drop an Open Database in Postgres?

Postgres で開いているデータベースを削除できません

エラーが発生しました

データベースを削除しようとすると、次のエラーが発生する場合があります:

pq: cannot drop the currently open database

問題を理解する

このエラーは次の理由で発生します。現在接続しているデータベースを削除しようとしています。データベースを削除すると、使用中のデータベースを含む、データベースへの開いているすべての接続が無効になります。

推奨される解決策

この問題を解決するには、別のデータベースに接続して DROP DATABASE を実行することをお勧めします。そこからコマンド。これにより、現在のデータベースの削除に関する問題を回避しながら、コマンドを実行するためのアクティブな接続が確保されます。

コード例:

// Connect to a secondary database
otherDbConn, err := sql.Open("postgres", "host=localhost port=5432 user=username dbname=otherdb")
if err != nil {
  return err
}

// Execute DROP DATABASE command on other database
_, err = otherDbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
if err != nil {
  return err
}

// Close the connection to the other database
otherDbConn.Close()

代替解決策: クライアントの強制切断

別のデータベースに接続できない場合、または接続したくない場合は、削除したいデータベースからすべてのクライアントを強制的に切断できます。これにはスーパーユーザー権限が必要なので、注意して使用する必要があります。

Postgres バージョン 9.2 より前の場合:

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';

Postgres バージョン 9.2 以降の場合:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';

強制後すべてのクライアントを切断すると、別のデータベースに接続して DROP DATABASE コマンドを実行できます。

以上がPostgres で開いているデータベースを削除できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。