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, которая работает в фоновом режиме.