Всякий раз, когда я пытаюсь удалить базу данных, я получаю:
ERROR: database "pilot" is being accessed by other users
DETAIL: There is 1 other session using the database.
Когда я использую:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';
Я разорвал соединение с этой БД, но если я попытаюсь отбросить базу данных после этого, каким-то образом кто-то автоматически подключится к этой базе данных и выдаст эту ошибку. Что может делать это? Никто не использует эту базу данных, кроме меня.
GRANT CONNECT ON DATABASE thedb TO public;
Всякий раз, когда я пытаюсь удалить базу данных, я получаю:
Сначала нужно отозвать
Тогда используйте:
Это обязательно сработает.
источник
Я нашел решение этой проблемы, попробуйте запустить эту команду в терминале
убить процесс этой командой
источник
Просто проверьте, какова связь, откуда она идет. Вы можете увидеть все это в:
Возможно, это ваша связь?
источник
Это означает, что другой пользователь обращается к базе данных. Просто перезапустите PostgreSQL. Эта команда сделает свое дело
Затем попробуйте сбросить базу данных:
Это сделает свое дело.
источник
Решение pgAdmin 4 с использованием пользовательского интерфейса
Сначала включите показывать активность на панели инструментов, если у вас нет:
Теперь отключите все процессы, используя базу данных:
Теперь должны быть в состоянии удалить БД.
источник
Если нет потенциального влияния на другие службы на вашем компьютере, просто
service postgresql restart
источник
Решение:
1. Выключите Pg-сервер. 2. Он отключит все активные соединения. 3. Перезапустите Pg-сервер. 4. Попробуйте ввести команду.
источник
Просто как тот
источник
В моем случае я использую AWS Redshift (на основе Postgres). И кажется, что нет никаких других подключений к БД, но я получаю эту же ошибку.
В моем случае кажется, что кластер базы данных все еще выполняет некоторую обработку в базе данных, и, хотя нет никаких других внешних / пользовательских подключений, база данных все еще используется внутри. Я нашел это, запустив следующее:
Так что я взломал написать цикл в моем коде, ища строки с именем моей базы данных. (конечно цикл не бесконечный, а сонный цикл и т. д.)
Если строки найдены, продолжайте удалять каждый PID, один за другим.
Если строк не найдено, перейдите к удалению базы данных
Примечание: в моем случае я пишу модульные / системные тесты Java, где это можно считать приемлемым. Это не приемлемо для производственного кода.
Вот полный взлом в Java (игнорируйте мои тестовые / служебные классы).
источник
На мой взгляд, в фоновом режиме работают несколько пустых запросов.
Примечание. Убийство запроса на выборку не оказывает негативного влияния
источник
REVOKE CONNECT
не помешает соединениям владельца БД или суперпользователя. Поэтому, если вы не хотите, чтобы кто-либо подключал базу данных, может быть полезна команда follow.Тогда используйте:
источник
Несмотря на то, что я нашел два ответа с верхним голосованием полезными в других случаях, сегодня самым простым способом решения проблемы было осознать, что PyCharm может держать сеанс открытым, и если я нажму
Stop
на PyCharm, это может помочь. Открыв в браузере pgAdmin4, я сделал это и почти сразу увидел, что статистика сеансов базы данных упала до 0, и в этот момент я смог удалить базу данных.источник
В macOS попробуйте перезапустить базу данных postgresql через консоль с помощью команды:
источник
В терминале попробуйте эту команду:
вы увидите как:
Третье число (3645) - PID.
Вы можете удалить это
И после этого запустите соединение с PostgreSQL.
Начать вручную:
источник