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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-19 12:15:03674ブラウズ

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

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