データベースを削除しようとすると、次のエラーが発生する場合があります:
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 サイトの他の関連記事を参照してください。