postgresql-не удается создать базу данных-OperationalError: доступ к исходной базе данных "template1" осуществляется другими пользователями
Я вошел в исходную базу данных template1, и теперь я не могу создать базу данных. Когда я пытаюсь создать базу данных, я получаю эту ошибку:
OperationalError: source database "template1" is being accessed by other users
DETAIL: There are 5 other session(s) using the database.
каждый раз, когда я вхожу в template1, я использую команду "exit" для выхода из системы, но, как вы можете видеть, она не выходит из системы, и количество сеансов увеличивается каждый раз, когда я вхожу в систему. Есть ли способ заставить отключить каждое соединение с template1, которое вошло в систему сейчас?
7 ответов
база данных template1
существует только для обеспечения структуры barebone для создания другой пустой базы данных. Вы должны никогда вход template1
, иначе у вас будут проблемы.
вероятно, самое простое решение для вас-перезапустить процесс сервера PostgreSQL и снова войти в систему. База данных, которая должна всегда существовать и безопасна для входа в систему, - это postgres
.
если перезапуск не вариант, вы можете использовать другую базу данных аварийных шаблон : template0
.
по умолчанию это утверждение:
CREATE DATABASE dbname;
эквивалентно:
CREATE DATABASE dbname TEMPLATE template1;
если template1
недоступен или поврежден, вы можете использовать template0
в крайнем случае:
CREATE DATABASE dbname TEMPLATE template0;
вы можете узнать больше о базах данных шаблонов здесь.
это помогло мне решить мою проблему:
SELECT *, pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename='username';
--Use pid if PostgreSQL version 9.2 or above.
Я прекратил все активные подключения к template1 и мог нормально создавать базу данных
чтобы решить эту проблему, я должен отключить соединение с базой данных от pgAdmin попробуйте раздел III.
вы также можете попытаться завершить текущий поток процесса с помощью терминала
Поиск процесс :
sudo ps aux | grep template1
убить процесс :
sudo kill -9
у меня есть скрипт, который подключается к базе данных и выполняет различные операции, некоторые требуя, чтобы никто не вошел в систему. Я изменил ответ @Andrius, чтобы не прерывать соединение моего скрипта, а скорее прекратить все остальные:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
С docs: pg_backend_pid()
- идентификатор процесса серверного процесса, подключенного к текущему сеансу.
эта проблема возникает, когда вы вошли в систему (psql template1 или psql template0) в базе данных template1 и template0 и выйти, используя команду ниже.
Ctrl + z
лучший способ существует из использования БД ниже команды postgres, тогда проблема не будет создавать:
\q + enter
есть 2 решения, если есть проблемы.
Решение - 1
перезагрузка услуги posgres как.
перезапуск службы sudo postgresql
решение - 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 --color=auto template1
остальная часть процесса должна быть убить, используя команду ниже.
sudo kill -9
теперь попробуйте снова создать db.
надеюсь, это поможет вам.
Анкит Х Ганди.