Удалить базу данных 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';

Ответ 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;