powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление базы данных
9 сообщений из 9, страница 1 из 1
Удаление базы данных
    #34310286
Alexey.Chaley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Задача:
Разработать скрипт, который из набора sql файлов создает базу данных на заданном сервере.
Если база с таким уменем уже существует, то ее нужно удалить.
При выполнении DROP DATABASE "%DATABASE%"; получаю сообщение об ошибке:
ERROR: database "%DATABASE%" is being accessed by other users
Вполне логично, если с базой работают тестеры.
Выполняю
SELECT procpid FROM pg_stat_activity;
Далее для каждого из procpid (кроме своего) выполняю
SELECT pg_cancel_backend(procpid);
Далее нужно как-то отключить всех пользователей от этой БД.

Какие есть решения этой проблемы?
Спасибо.
...
Рейтинг: 0 / 0
Удаление базы данных
    #34311045
Serik Akhmetov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прямо и просто, написать процедуру на plperlu которая будет kill'ять их процессы,
хотя может и есть более изящный способ
...
Рейтинг: 0 / 0
Удаление базы данных
    #34311926
Alexey.Chaley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Но вариант с plperl не устраивает.
Хотелось бы сделать средствами plpgsql.
...
Рейтинг: 0 / 0
Удаление базы данных
    #34312114
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помоему в консольной команде dropdb есть ключик -force, который позволит удальть бд несмотря на присутствие подключений.
...
Рейтинг: 0 / 0
Удаление базы данных
    #34312603
Alexey.Chaley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, нет такого ключа.
db# dropdb --help
dropdb removes a PostgreSQL database.

Usage:
dropdb [OPTION]... DBNAME

Options:
-e, --echo show the commands being sent to the server
-i, --interactive prompt before deleting anything
-q, --quiet don't write any messages
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port
-U, --username=USERNAME user name to connect as
-W, --password prompt for password
--help show this help, then exit
--version output version information, then exit

Report bugs to <pgsql-bugs@postgresql.org>;.

SELECT version();
PostgreSQL 8.1.4 on i386-portbld-freebsd6.2, compiled by GCC cc (GCC) 3.4.6 [FreeBSD] 20060305
...
Рейтинг: 0 / 0
Удаление базы данных
    #34321187
Alexey Kuzovkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Реально на plperlu
у меня работает
другого способа не нашел
...
Рейтинг: 0 / 0
Удаление базы данных
    #34321190
Alexey Kuzovkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE FUNCTION z_disconnect_from(character varying) RETURNS integer
AS $_$
my ($dbn) = @_;
my $sth = spi_query("select procpid from pg_stat_activity where procpid != pg_backend_pid() and datname = '$dbn'");
while (defined ($row = spi_fetchrow($sth))) {
kill 15,$row->{procpid};
}
return 1;
$_$
LANGUAGE plperlu;
...
Рейтинг: 0 / 0
Удаление базы данных
    #34325414
Alexey.Chaley
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо.
Но возможности использовать plperl нет :(
...
Рейтинг: 0 / 0
Удаление базы данных
    #34326107
Alexey Kuzovkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно написать аналогичную процедуру в виде скрипта который не хранится в базе на любом языке который вам доступен и имеет библиотеку работы с postgresql.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление базы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]