2016-04-08 92 views
4

を削除することはできません私は現在、これ等に接続していたデータベースをドロップしようとしているが、私はこのエラーを取得しています:Postgresは、データベースのエラーをドロップし、現在開いているデータベース

pq: cannot drop the currently open database 

Iドン接続を閉じる必要がある場合、データベースを削除すると予想される方法を理解していません.DROP DATABASE文を実行するためにdbConn.Execを使用できるとは思えないからです。

dbConn *sql.DB 

func stuff() error { 
    _, err := dbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName)) 
    if err != nil { 
    return err 
    } 

    return dbConn.Close() 
} 

私は別のデータベースに接続し、その接続上で、それを実行することができると思いますが、私はそれが動作したい場合にもわからないんだけど、新しいデータベースに接続する必要が本当に奇妙なようです別のデータベースを削除するだけです。何か案は?ありがとう。

答えて

5

開いている接続があるデータベースでdropDbコマンドを実行しようとしています。 postgresの文書によると

You cannot be connected to the database you are about to remove. Instead, connect to template1 or any other database and run this command again.

、データベース全体をドロップすると、そのデータベースに参照し、開いているすべての接続が無効になるので、これは、理にかなっている、だから、推奨されるアプローチは、別のデータベースに接続することですこのコマンドを再度実行してください。

異なるクライアントがデータベースに接続されている状況で、実際にデータベースを削除したい場合、その特定のデータベースからすべてのクライアントを強制的に切断できます。例えば

は、強制的にデータベース mydbからすべてのクライアントを切断します

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

注:このコマンドは、スーパーユーザー権限が必要です。

次に、別のデータベースに接続し、dropDbコマンドを再度実行してください。

関連する問題