Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление базы данных / 9 сообщений из 9, страница 1 из 1
06.02.2007, 17:58
    #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
07.02.2007, 08:08
    #34311045
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление базы данных
прямо и просто, написать процедуру на plperlu которая будет kill'ять их процессы,
хотя может и есть более изящный способ
...
Рейтинг: 0 / 0
07.02.2007, 11:54
    #34311926
Alexey.Chaley
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление базы данных
Спасибо.
Но вариант с plperl не устраивает.
Хотелось бы сделать средствами plpgsql.
...
Рейтинг: 0 / 0
07.02.2007, 12:25
    #34312114
Алексей Ключников
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление базы данных
помоему в консольной команде dropdb есть ключик -force, который позволит удальть бд несмотря на присутствие подключений.
...
Рейтинг: 0 / 0
07.02.2007, 14:06
    #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
10.02.2007, 16:34
    #34321187
Alexey Kuzovkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление базы данных
Реально на plperlu
у меня работает
другого способа не нашел
...
Рейтинг: 0 / 0
10.02.2007, 16:37
    #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
12.02.2007, 21:37
    #34325414
Alexey.Chaley
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление базы данных
Большое спасибо.
Но возможности использовать plperl нет :(
...
Рейтинг: 0 / 0
13.02.2007, 10:28
    #34326107
Alexey Kuzovkov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление базы данных
можно написать аналогичную процедуру в виде скрипта который не хранится в базе на любом языке который вам доступен и имеет библиотеку работы с postgresql.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление базы данных / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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