PGError: ОШИБКА: к исходной базе данных "template1" обращаются другие пользователи - PullRequest
12 голосов
/ 12 февраля 2011

У меня проблемы с тестированием для работы с Postgresql и Rails 3.

Как базы данных разработки, так и рабочие базы данных, я могу нормально работать, однако тестовая база данных выдает следующие ошибки при запуске rake или db:test:prepare и т. Д.

PGError: ОШИБКА: к исходной базе данных "template1" обращаются другие пользователи

Обновление

Гуглится, кажется, что нужно использовать template0 вместо template1 при использовании созданного b для создания новой базы данных в Postgres. В типичном «Так я устраню причину. Но не симптом », я нашел vendor/rails/railities/lib/task/databases.rake и изменил строку 109 следующим образом:

createdb #{enc_option} \
-U "#{abcs["test"]["username"]}" \
-T template0 #{abcs["test"]["database"]}

Но я на самом деле не хочу этого делать, поскольку я использую Rails в качестве GEM, кто-нибудь знает о другой работе или исправлении?

database.yml

development:
  adapter: postgresql
  encoding: unicode
  database: test1234_development
  pool: 5
  username: holden
  password: postgres

test:
  adapter: postgresql
  encoding: unicode
  database: test1234_test
  pool: 5
  username: holden
  password: postgres

Полная ошибка :

ВНИМАНИЕ: база данных "test1234_test" не существует, пропуск
PGError: ОШИБКА: к исходной базе данных "template1" обращаются другие пользователи
ДЕТАЛИ: Есть 1 другой сеанс (ы), использующие базу данных.
: СОЗДАТЬ БАЗУ ДАННЫХ "test1234_test" ENCODING = 'Юникод'

Ответы [ 6 ]

15 голосов
/ 12 февраля 2011

Короткая история : CREATE DATABASE работает путем копирования существующей базы данных. PostgreSQL не позволит вам скопировать базу данных, если к ней подключен другой сеанс. Если к template1 обращаются другие пользователи, CREATE DATABASE завершится неудачей.

Вопрос, на который вам нужно ответить: почему другие сеансы связаны с шаблоном1?

Разница между шаблоном0 и шаблоном1

В момент инициализации кластера базы данных template0 и template1 совпадают. Любые специфические для местоположения материалы, которые вы хотите сделать доступными для каждой базы данных, которую вы создаете с помощью CREATE DATABASE, должны идти в template1. Так, например, если вы добавите процедурный язык PL / python в template1, каждая созданная вами позже база данных будет включать PL / python.

База данных template0 предназначена для "девственного" шаблона. Он должен содержать только стандартные объекты базы данных - созданные при инициализации кластера. Как «девственный» шаблон, он никогда не должен изменяться. Никогда.

Если вам нужно указать настройки кодировки и локали (сопоставление), то вы можете сделать это, скопировав template0. Вы не можете сделать это, скопировав template1.

2 голосов
/ 07 ноября 2017

Просто перезапустите службу базы данных.

2 голосов
/ 01 ноября 2017

Эта проблема возникает, когда вы вошли в систему ( psql template1 или psql template0 ) в базе данных template1 и template0 и выйдите, используя приведенную ниже команду.

Ctrl + z

Существует лучший способ использования db ниже команды postgres, тогда проблема не создастся:

\ q + введите

Есть 2 решения, если есть проблема.

Решение - 1

Перезапустите сервис posgres как.

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 --color = auto template1

Остальная часть процесса должна быть уничтожена командой ниже.

sudo kill -9

Теперь попробуйте снова создать БД.

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

Анкит Ганди.

0 голосов
/ 09 декабря 2018

Решением для меня было удалить старый сервер и создать новый из веб-интерфейса администратора Postgresql.Теперь можно создать новую базу данных без этой ошибки.

0 голосов
/ 02 января 2018

Я перезапустил свою систему, и ошибка все еще показывала. Тем не менее, я выполнил следующие действия, чтобы разобраться.

  1. Остановите все процессы, используя порт 5432 postgres, выполнив это в командной строке (Admin): введите netstat -ano в командной строке. Найдите pid с локальным адресом 0.0.0.0:5432. Затем используйте taskkill /pid {pid} /f, чтобы убить задачу.

  2. Запустите службу postgres в службах Windows.

0 голосов
/ 01 июня 2014

Я также получил эту ошибку при попытке сброса базы данных, когда у меня работал WEBrick на сервере Ruby on Rails по умолчанию:

$ bin/rake db:reset
PG::Error: ERROR:  database "dev" is being accessed by other users
DETAIL:  There is 1 other session using the database.
: DROP DATABASE IF EXISTS "dev"

Другим пользователем здесь было запущенное приложение Rails. После выключения сервера с помощью CTRL + c , Мне удалось без проблем выполнить команду сброса базы данных.

Это тоже имеет смысл. Вы не можете удалить базу данных, если к ней в данный момент подключен кто-то другой, поскольку Майк Шеррилл также указывает на .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...