Отбросьте базу данных postgresql через командную строку [закрыто]

Я пытаюсь удалить свою базу данных и создать новую через командную строку. Я войти с помощью psql-U имя пользователя, а затем сделать connect template1, а затем падение базы данных databasename;

Я получаю сообщение об ошибке "database databasename доступен другим пользователям". Я выключил Apache и попробовал это, и все еще получаю эту ошибку. Я делаю что-то не так?

4 ответов


Вы можете запустить dropdb команда из командной строки:

dropdb 'database name'

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

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

SELECT * FROM pg_stat_activity WHERE datname='database name';

это сработало для меня:

select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';

для postgresql ранее 9.2 заменить pid С procpid

DROP DATABASE "YourDatabase";

http://blog.gahooa.com/2010/11/03/how-to-force-drop-a-postgresql-database-by-killing-off-connection-processes/


попробуйте это. Обратите внимание, что база данных не указана - она просто работает"на сервере"

psql -U postgres -c "drop database databasename"

Если это не сработает, я видел проблему с postgres, держащимся за осиротевшие подготовленные заявления.
Чтобы очистить их, сделайте следующее:

SELECT * FROM pg_prepared_xacts;

затем для каждого id вы видите, запустите это:

ROLLBACK PREPARED '<id>';

когда он говорит, что пользователи подключены,что говорит запрос " select * from pg_stat_activity;"? Подключены ли другие пользователи, кроме вас? Если это так, вам может потребоваться отредактировать pg_hba.conf файл, чтобы отклонить соединения от других пользователей, или закрыть любое приложение, доступ к базе данных pg, чтобы иметь возможность удалить его. У меня эта проблема иногда возникает в производстве. Установить файле pg_hba.conf, чтобы иметь две строки, как это:

local   all         all                               ident
host    all         all         127.0.0.1/32          reject

и скажите pgsql перезагрузить или перезапустить (т. е. либо суда /и т. д./init.D / postgresql reload или pg_ctl reload), и теперь единственный способ подключиться к вашей машине-через локальные сокеты. Я предполагаю, что вы на linux. Если нет, это может потребоваться настроить на что-то другое, чем local / ident на этой первой строке, на что-то вроде host ... вашеимяпользователя.

теперь вы должны быть в состоянии сделать:

psql postgres
drop database mydatabase;