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

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

Patricia Arquette
リリース: 2024-11-19 10:28:02
オリジナル
549 人が閲覧しました

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

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

エラーが発生しました

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

1

pq: cannot drop the currently open database

ログイン後にコピー

問題を理解する

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

推奨される解決策

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

コード例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// 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 より前の場合:

1

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

ログイン後にコピー

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

1

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

ログイン後にコピー

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

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート