postgresql - невозможно создать базу данных - OperationalError: исходная база данных "template1" доступна другим пользователям
Я вошел в исходный шаблон базы данных1, и теперь я не могу создать базу данных. Когда я пытаюсь создать базу данных, я получаю эту ошибку:
OperationalError: source database "template1" is being accessed by other users
DETAIL: There are 5 other session(s) using the database.
Каждый раз, когда я вхожу в систему для шаблона1, я использую команду "exit" для выхода из системы, но, как вы видите, она не выходит из системы, и количество сеансов увеличивается каждый раз, когда я вхожу в систему. Есть ли способ принудительно отключить каждое соединение с шаблоном1, которое теперь входит в систему?
Ответы
Ответ 1
Это помогло мне решить мою проблему:
SELECT *, pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename='username';
--Use pid if PostgreSQL version 9.2 or above.
Я прекратил все активные подключения к шаблону1 и мог нормально создавать базу данных
Ответ 2
template1
базы template1
существует только для обеспечения barebone-структуры для создания еще одной пустой базы данных. Вы никогда не должны подключаться к template1
, иначе у вас возникнут проблемы.
Вероятно, самое простое решение для вас - перезапустить серверный процесс PostgreSQL и снова войти в систему. База данных, которая всегда должна существовать и безопасна для входа в систему, - postgres
.
Если перезапуск не является вариантом, вы можете использовать другую базу данных template0
аварийных событий: template0
.
По умолчанию это утверждение:
CREATE DATABASE dbname;
эквивалентно:
CREATE DATABASE dbname TEMPLATE template1;
Если template1
недоступен или поврежден, вы можете использовать template0
качестве последнего средства:
CREATE DATABASE dbname TEMPLATE template0;
Вы можете узнать больше о базах данных шаблонов здесь.
Ответ 3
Чтобы решить эту проблему, я должен отключить соединение с базой данных из pgAdmin III.
Ответ 4
Вы также можете попытаться завершить текущий поток процесса с помощью терминала
Поиск в процессе:
sudo ps aux | grep template1
Убейте процесс:
sudo kill -9 <ваш идентификатор процесса>
Ответ 5
У меня есть сценарий, который соединяется с базой данных и выполняет различные операции над ним, некоторые требуют, чтобы никто другой не вошел в систему. Я изменил @Andrius, чтобы не прерывать соединение с моим скриптом, а скорее разорвать все остальные:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
Из документов: pg_backend_pid()
- это идентификатор процесса серверного процесса, подключенного к текущему сеансу.
Ответ 6
Эта проблема возникает, когда вы вошли в систему (psql template1 или psql template0) в базе данных template1 и template0 и выходите с помощью команды ниже.
Ctrl + z
Лучше всего существует использование db ниже команды postgres, тогда проблема не создаст:
\ q + введите
Есть 2 решения, если есть проблема.
Решение - 1
Перезапустите службу посмертов.
sudo service postgresql restart
Решение - 2
sudo ps aux | grep template1
Не удаляйте эти процессы
postgres 8363 0.0 0.0 111760 7832 pts/11 T 09:49 0:00/usr/lib/postgresql/9.5/bin/psql template1 ankit 18119 0.0 0.0 14224 976 pts/14 S+ 12:33 0:00 grep [CN00 ] = автоматический шаблон1
остальная часть процесса должна быть убита с помощью команды ниже.
sudo kill -9
Теперь попробуйте создать db снова.
Надеюсь, это поможет вам.
Анкит Х Ганди.
Ответ 7
На Windows мне пришлось переустанавливать PostgreSQL, перезапуск не помог.
Ответ 8
Вы можете попробовать перезапустить службу postgresql, которая работает в фоновом режиме.