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.

надеюсь, это поможет вам.

Анкит Х Ганди.


вы можете попытаться перезапустить службу postgresql, которая работает в фоновом режиме.