Удалить базу данных PostgreSQL через командную строку
Я пытаюсь удалить свою базу данных и создать новую через командную строку.
Я psql -U username
в систему, используя psql -U username
а затем выполняю \connect template1
, за которым следует имя DROP DATABASE databasename;
,
Я получаю ошибку
база данных к базе данных обращаются другие пользователи
Я выключил Apache и попробовал это снова, но я все еще получаю эту ошибку. Я делаю что-то неправильно?
Ответы
Ответ 1
Вы можете запустить команду dropdb из командной строки:
dropdb 'database name'
Обратите внимание, что вы должны быть суперпользователем или владельцем базы данных, чтобы иметь возможность отказаться от него.
Вы также можете проверить представление pg_stat_activity, чтобы узнать, какой вид активности в данный момент происходит в вашей базе данных, включая все незанятые процессы.
SELECT * FROM pg_stat_activity WHERE datname='database name';
Ответ 2
Это сработало для меня:
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/
Ответ 3
Попробуйте это. Обратите внимание: база данных не указана - она просто запускается "на сервере"
psql -U postgres -c "drop database databasename"
Если это не сработает, я видел проблему с postgres, держащей сиротские подготовленные заявления.
Чтобы очистить их, сделайте следующее:
SELECT * FROM pg_prepared_xacts;
то для каждого идентификатора, который вы видите, запустите это:
ROLLBACK PREPARED '<id>';
Ответ 4
Когда он говорит, что пользователи подключены, что делает запрос "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 о перезагрузке или перезагрузке (например, sudo/etc/init.d/postgresql reload или pg_ctl reload), и теперь единственный способ подключения к вашему компьютеру - через локальные сокеты. Я предполагаю, что вы на Linux. Если нет, это может потребоваться изменить на что-то другое, кроме local/ident в этой первой строке, на что-то вроде host... yourusername.
Теперь вы сможете это сделать:
psql postgres
drop database mydatabase;