Sql error 55006 error cannot drop the currently open database

Ошибка удаления базы данных Postgres: pq: невозможно удалить текущую открытую базу данных Я пытаюсь удалить базу данных, к которой я сейчас подключен, но получаю эту ошибку: Я действительно не понимаю, как я должен отбросить базу данных, если мне придется закрыть мое соединение, потому что тогда я не думаю, что смогу использовать dbConn.Exec для выполнения […]

Содержание

  1. Ошибка удаления базы данных Postgres: pq: невозможно удалить текущую открытую базу данных
  2. 4 ответа
  3. Удалить базу данных, к которой обращаются другие пользователи?
  4. 7 ответов
  5. Can’t Delete Database #8541
  6. Comments
  7. System information:
  8. Connection specification:
  9. Describe the problem you’re observing:
  10. Steps to reproduce, if exist:
  11. Include any warning/errors/backtraces from the logs
  12. Ошибка удаления базы данных Postgres: pq: невозможно удалить текущую открытую базу данных
  13. Удалить базу данных, к которой обращаются другие пользователи?
  14. 6 ответы

Ошибка удаления базы данных Postgres: pq: невозможно удалить текущую открытую базу данных

Я пытаюсь удалить базу данных, к которой я сейчас подключен, но получаю эту ошибку:

Я действительно не понимаю, как я должен отбросить базу данных, если мне придется закрыть мое соединение, потому что тогда я не думаю, что смогу использовать dbConn.Exec для выполнения моего оператора DROP DATABASE?

Думаю, я мог бы подключиться к другой базе данных, а затем выполнить ее в этом соединении, но я даже не уверен, что это сработает, и кажется действительно странным подключаться к новой базе данных, чтобы просто удалить другую базу данных. Есть идеи? Благодарю.

4 ответа

Потому что вы пытаетесь выполнить команду dropDb в базе данных, к которой у вас открыто соединение.

Согласно документации postgres:

Вы не можете подключиться к базе данных, которую собираетесь удалить. Вместо этого подключитесь к template1 или любой другой базе данных и снова запустите эту команду.

Это имеет смысл, потому что, когда вы удаляете всю базу данных, все открытые соединения, ссылающиеся на эту базу данных, становятся недействительными. Поэтому рекомендуется подключиться к другой базе данных и снова выполнить эту команду.

Если вы столкнулись с ситуацией, когда к базе данных подключен другой клиент, и вы действительно хотите удалить базу данных, вы можете принудительно отключить всех клиентов от этой конкретной базы данных.

Например, чтобы принудительно отключить всех клиентов от базы данных mydb :

Если PostgreSQL & lt; 9.2

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

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ‘mydb’;

Примечание. Эта команда требует прав суперпользователя.

Затем вы можете подключиться к другой базе данных и снова запустить команду dropDb .

Я использую PostgreSQL 12 и pgAdmin-4 в Windows 10. Мне пришлось использовать комбинацию приведенных выше ответов, чтобы удалить базу данных, которую я не мог удалить в pgAdmin, потому что мне не удалось закрыть все открытые соединения в pgAdmin.

В командной строке Windows предполагается, что имя моего сервера — postgres, а моя база данных — mydb:

Я вошел в систему с паролем своего сервера.

Затем я закрыл все открытые подключения к mydb:

Наконец, я успешно сбросил mydb:

Теперь, если я вернусь в pgAdmin-4, его больше нет.

У меня ничего из этого не сработало, поскольку я пытался сделать это через pgAdmin, который держал соединения с базой данных открытыми, как только я их удаляю.

После того, как вы введете правильную информацию, вы сможете получить командную строку pg, здесь вы можете просто ввести:

После этого вы все еще можете видеть базу данных в pgAdmin, но теперь вы можете просто удалить ее, щелкнув правой кнопкой мыши и выбрав опцию DELETE/DROP .

Если вы столкнулись с этой проблемой в IntelliJ, измените схему с помощью следующего раскрывающегося списка на postgres.

Источник

Удалить базу данных, к которой обращаются другие пользователи?

Я пытаюсь удалить базу данных из PgAdmin 3 и получаю следующее сообщение об ошибке:

Как я могу принудительно удалить / исправить эту ошибку этой базы данных?

7 ответов

Быстрое исправление в PgAdmin: просто создайте еще одну пустую базу данных. Выберите это. Удалите первый. Вуаля.

Вы также можете подключиться к командной строке, не выбирая конкретную базу данных, и удалить свою базу данных.

Проблема здесь не в том, что другие пользователи подключены к базе данных, а в том, что вы подключены.

Самое простое и, возможно, самое аккуратное решение — перейти к службам и остановить сервер PostgreSQL, а затем запустить его, а затем снова запустить команду drop database yourdbname; . Это должно отключить любые сеансы и позволить вам удалить текущую базу данных.

Это сообщение автора Лиладхаран Ахар помог мне в работе с этой ошибкой.

По сути, это сводится к следующему:

Самое простое решение — перезапустить postgresql . После этого вы можете избавиться от базы данных!

Вместо создания новой базы данных он может просто подключиться к базе данных postgres, которая создается по умолчанию во всех новых установках PostgreSQL. И даже если его там нет — template1 должен быть всегда.

Лучший способ удалить пользователя указан ниже

Как будто у меня есть имя пользователя «X», и у него есть разрешение на доступ к имени базы данных: «Тест». И вот мы создали соединение с базой данных «Тест».

Если мы попробуем: отбросить пользователя «X», это будет окончательно отображать указанную ниже ошибку:

ОШИБКА: невозможно удалить пользователя «X», поскольку у него есть привилегия на некоторый объект. Состояние SQL = 55006 .

Прежде всего, соединение не должно создаваться с помощью «Test» db. Потому что он в настоящее время используется, поэтому мы не можем удалить пользователя. создать соединение с любой базой данных, кроме, например, «Тест». Теперь еще раз попробуйте сбросить пользовательский тест. На моей стороне все должно работать нормально, дайте мне знать, если вы столкнулись с проблемой на своей стороне.

Если вы хотите использовать интерфейс pgAdmin4, вам нужно сначала удалить / удалить базу данных, затем, прежде чем ждать ошибки, вы должны немедленно отключиться от той же базы данных, после чего она будет удалена без проблем.

Источник

Can’t Delete Database #8541

System information:

  • MacOS Mojave 10.14.6
  • DBeaver version 7.0.3.202004191823

Connection specification:

Describe the problem you’re observing:

Since updating to version 7.0.3.202004191823, can’t delete a specific database. No matter what, I receive error message
Can’t delete object ‘warehouse_labs’ Reason: Cannot drop the currently open database. Switch to another database and try again (Note: enable ‘Show all databases’ option to see them).

In the old version, could just set another database active and delete any open tasks on this database, but new version seems to have removed option to set databases active. Instead can set other dbs as default, but this doesnt solve the problem. There are no open tasks of any kind.

This only seems to apply to one specific database, so implies new version won’t switch which database is active.

Steps to reproduce, if exist:

  1. Open connection
  2. Right click on database and click delete
  3. Await error message

Include any warning/errors/backtraces from the logs

Reason: Cannot drop the currently open database. Switch to another database and try again (Note: enable ‘Show all databases’ option to see them).

The text was updated successfully, but these errors were encountered:

Источник

Ошибка удаления базы данных Postgres: pq: невозможно удалить текущую открытую базу данных

Я пытаюсь удалить базу данных, к которой я сейчас подключен, но получаю такую ​​ошибку:

Я действительно не понимаю, как я должен отбросить базу данных, если мне придется закрыть мое соединение, потому что тогда я не думаю, что смогу использовать dbConn.Exec для выполнения моего оператора DROP DATABASE?

Думаю, я мог бы подключиться к другой базе данных, а затем выполнить ее в этом соединении, но я даже не уверен, что это сработает, и кажется действительно странным подключаться к новой базе данных только для того, чтобы удалить другую базу данных. Любые идеи? Спасибо.

Потому что вы пытаетесь выполнить 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’;

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ‘mydb’;

Примечание. Эта команда требует прав суперпользователя.

Затем вы можете подключиться к другой базе данных и dropDb снова запустить команду.

Источник

Удалить базу данных, к которой обращаются другие пользователи?

Я пытаюсь удалить базу данных из PgAdmin 3 и получаю следующее сообщение об ошибке:

как я могу принудительно удалить / исправить эту ошибку этой базы данных?

задан 19 марта ’09, 19:03

6 ответы

Быстрое исправление в PgAdmin: просто создайте еще одну пустую базу данных. Выберите это. Удалите первый. Вуаля.

Вы также можете подключиться к командной строке, не выбирая конкретную базу данных, и удалить свою базу данных.

Проблема здесь не в том другие пользователи подключены к базе данных, но это являетесь есть.

ответ дан 19 мар ’09, в 21:03

«Так же можно подключиться к командной строке, не выбирая конкретную базу данных, . » — неправда. Вероятно, вы введены в заблуждение, потому что, когда вы запускаете psql и не указываете имя БД, psql пытается подключиться к БД, названной в честь указанного вами пользователя (или системного пользователя, если он тоже отсутствует). — Милен А. Радев

В pgAdmin 4 мне просто нужно было щелкнуть левой кнопкой мыши по самой базе данных postgres, затем щелкнуть правой кнопкой мыши целевую базу данных и удалить ее. — Филипп

Это сообщение автор Leeladharan Achar помог мне в работе с этой ошибкой.

По сути, это сводится к следующему:

ответ дан 19 авг.

Самое простое решение для этого — перезапустите postgresql. После этого вы можете избавиться от базы данных!

ответ дан 29 мая ’17, 08:05

Вместо создания новой базы данных он может просто подключиться к базе данных postgres, которая создается по умолчанию во всех новых установках PostgreSQL. И даже если его там нет — template1 должен быть всегда.

ответ дан 24 мар ’09, в 23:03

Если вы хотите использовать интерфейс pgAdmin4, вы должны сначала удалить / удалить базу данных, затем, прежде чем ждать ошибки, вы должны немедленно отключиться от той же базы данных, после чего она будет удалена без проблем.

ответ дан 16 окт ’20, 14:10

Ниже упомянут лучший способ сбросить пользователя.

Как будто у меня есть имя пользователя «X», и у него есть разрешение на доступ к имени базы данных: «Тест». И теперь у нас создана связь с базой данных «Тест».

Если мы попробуем: отбросить пользователя «X», это будет окончательно отображать указанную ниже ошибку:

ОШИБКА: пользователь «X» не может быть удален, потому что у пользователя есть привилегия на некоторый объект. Состояние SQL = 55006.

Прежде всего, соединение не должно создаваться с помощью «Test» db. Потому что он в настоящее время используется, поэтому мы не можем удалить пользователя. создать соединение с любой базой данных, кроме, например, «Test». Теперь снова попробуйте drop user test. На моей стороне все должно работать нормально, дайте мне знать, если вы столкнулись с проблемой на вашей стороне.

Источник

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Comments

@MarcoBorchert

Trying to delete the (single) database of a Postgresql connection using the context-menu item «Delete» fails with error message

SQL Error [55006]: ERROR: cannot drop the currently open database

@serge-rider

It is not a bug. As it is said in error message — you can’t delete database you are connected with.
Solution:

  • Enable «Show not default databases» option in connection properties.
  • Switch to another database (right click->Set active)
  • Drop you original database

@MarcoBorchert

The behaviour is not what I expected after using pgAdmin, where this works without error (my guess: the active connection is dropped and a connection to the default database «postgres» is used instead for the drop statement).
A simple(r) fix would be to disable the context-menu item «Delete» for databases with an active connection.

P.S.: not a big issue at all; DBeaver is still by far the best DBM I have used so far!

@speedy1812

It would be hugely helpful to add some info on what a user should do when he tries to delete a currently open database. I was trying to figure out how to do just that, and spent over an hour searching the web and the Dbeaver docs before finding this post.

@serge-rider

@speedy1812 good point, will add extra explanation in the error message.

@cmtmc

It is not a bug. As it is said in error message — you can’t delete database you are connected with.
Solution:

  • Enable «Show not default databases» option in connection properties.
  • Switch to another database (right click->Set active)
  • Drop you original database

Where is it in 6.3.3?

srugano, mvelebit, datawookie, LoriKarikari, Timothyryanhall, ojathelonius, rafaelcardoso, vgarridoffdc, steezeburger, eddiewang, and 9 more reacted with thumbs up emoji

@jamieoliveredwards

In the Database Navigator, right click on the connection and select Edit Connection. Then change the Database field to a value that is different to the DB you want to delete. You’ll be prompted to refresh the connection and you should then be able to delete the first DB.

image

This was the only way I managed to do this on version 7.3.5. However I may have missed something obvious.

Я пытаюсь удалить базу данных, к которой я сейчас подключен, но получаю эту ошибку:

pq: cannot drop the currently open database

Я действительно не понимаю, как я должен отбросить базу данных, если мне придется закрыть мое соединение, потому что тогда я не думаю, что смогу использовать dbConn.Exec для выполнения моего оператора DROP DATABASE?

dbConn *sql.DB

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

  return dbConn.Close()
}

Думаю, я мог бы подключиться к другой базе данных, а затем выполнить ее в этом соединении, но я даже не уверен, что это сработает, и кажется действительно странным подключаться к новой базе данных, чтобы просто удалить другую базу данных. Есть идеи? Благодарю.

4 ответа

Лучший ответ

Потому что вы пытаетесь выполнить команду dropDb в базе данных, к которой у вас открыто соединение.

Согласно документации postgres:

Вы не можете подключиться к базе данных, которую собираетесь удалить. Вместо этого подключитесь к template1 или любой другой базе данных и снова запустите эту команду.

Это имеет смысл, потому что, когда вы удаляете всю базу данных, все открытые соединения, ссылающиеся на эту базу данных, становятся недействительными. Поэтому рекомендуется подключиться к другой базе данных и снова выполнить эту команду.

Если вы столкнулись с ситуацией, когда к базе данных подключен другой клиент, и вы действительно хотите удалить базу данных, вы можете принудительно отключить всех клиентов от этой конкретной базы данных.

Например, чтобы принудительно отключить всех клиентов от базы данных mydb:

Если PostgreSQL & lt; 9.2

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

Другое

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

Примечание. Эта команда требует прав суперпользователя.

Затем вы можете подключиться к другой базе данных и снова запустить команду dropDb.


39

Parth Desai
3 Апр 2019 в 05:23

Я использую PostgreSQL 12 и pgAdmin-4 в Windows 10. Мне пришлось использовать комбинацию приведенных выше ответов, чтобы удалить базу данных, которую я не мог удалить в pgAdmin, потому что мне не удалось закрыть все открытые соединения в pgAdmin.

Закройте pgAdmin-4.

В командной строке Windows предполагается, что имя моего сервера — postgres, а моя база данных — mydb:

C:> psql -U postgres

Я вошел в систему с паролем своего сервера.

Затем я закрыл все открытые подключения к mydb:

postgres-# SELECT * FROM pg_stat_activity WHERE pg_stat_activity.datname='mydb';
postgres-# SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';

Наконец, я успешно сбросил mydb:

postgres-# DROP DATABASE mydb;

Теперь, если я вернусь в pgAdmin-4, его больше нет.


0

GCru
15 Сен 2020 в 20:47

У меня ничего из этого не сработало, поскольку я пытался сделать это через pgAdmin, который держал соединения с базой данных открытыми, как только я их удаляю.

Решение:

C:Program FilesPostgreSQL11scriptsrunpsql.bat

После того, как вы введете правильную информацию, вы сможете получить командную строку pg, здесь вы можете просто ввести:

dbdrop yourdatabase

После этого вы все еще можете видеть базу данных в pgAdmin, но теперь вы можете просто удалить ее, щелкнув правой кнопкой мыши и выбрав опцию DELETE/DROP.


1

Harvey
13 Ноя 2019 в 16:06

Если вы столкнулись с этой проблемой в IntelliJ, измените схему с помощью следующего раскрывающегося списка на postgres.

После этого я смог сбросить db.

enter image description here


6

simibac
10 Июн 2020 в 06:17

Понравилась статья? Поделить с друзьями:
  • Sql error 500051
  • Sql error 50000
  • Sql error 22018
  • Sql error 42p16 error cannot drop columns from view
  • Sql error 22012 error division by zero