Postgres drop database error: pq: не удается удалить текущую открытую базу данных
Я пытаюсь удалить базу данных, к которой я в настоящее время подключен, как так, но я получаю эту ошибку:
pq: cannot drop the currently open database
Я действительно не понимаю, как я должен удалить базу данных, если мне нужно закрыть соединение, потому что тогда я не думаю, что смогу использовать dbConn.Exec для выполнения инструкции базы данных DROP?
dbConn *sql.DB
func stuff() error {
_, err := dbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
if err != nil {
return err
}
return dbConn.Close()
}
Я думаю, я мог бы подключиться к другой базе данных, а затем выполнить ее на этом соединении, но я даже не уверен, что это сработает, и кажется очень странно подключаться к новой базе данных, чтобы удалить другую базу данных. Есть идеи? Спасибо.
1 ответов
потому что вы пытаетесь выполнить dropDb
команда на базе данных, к которой у вас есть открытое соединение.
согласно документации postgres:
вы не можете быть подключены к базе данных, которую вы собираетесь удалить. Вместо этого подключитесь к template1 или любой другой базе данных и снова запустите эту команду.
это имеет смысл, потому что при удалении всей базы данных все открытое соединение, ссылающееся на эту базу данных, становится недействительным, поэтому рекомендуется подключиться к другой базе данных и выполнить эту команду снова.
если вы столкнулись с ситуацией, когда другой клиент подключается к базе данных, и вы действительно хотите удалить базу данных, вы можете принудительно отключить всех клиентов из этой базы данных.
например, принудительно отключить всех клиентов от базы данных mydb
:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Примечание: эта команда требует привилегии суперпользователя.
затем вы можете подключиться к другой базе данных, и запустите снова.