ホームページ > バックエンド開発 > Golang > 現在接続されている PostgreSQL データベースを削除するには?

現在接続されている PostgreSQL データベースを削除するには?

Mary-Kate Olsen
リリース: 2024-11-19 12:15:03
オリジナル
733 人が閲覧しました

How to Drop a Currently Connected PostgreSQL Database?

現在接続されている Postgres データベースの削除エラー

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 サイトの他の関連記事を参照してください。

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