drop database - вызов из функции (postgres:12-alpine )
В рамках рабочего проекта часто приходится перенакатывать базу с нуля. В связи с чем решил на скорую руку написать скрипт, делающий это быстро. Написал примерно следующее
create or replace procedure dropTestDb(prefix varchar)
as
$$
declare
dbname name;
begin
FOR dbname in (select datname from pg_database where datname like prefix || '.%')
LOOP
EXECUTE 'REVOKE CONNECT ON DATABASE "' || dbname || '" FROM public;';
EXECUTE 'SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = ''' ||
dbname || ''' AND pid <> pg_backend_pid();';
execute 'drop database "' || dbname || '" ';
EXECUTE 'create database "' || dbname || '"';
END LOOP;
end
$$ LANGUAGE plpgsql;
На этапе выполнения падает ошибка [25001] ERROR: DROP DATABASE cannot be executed from a function
Ошибка понятна, документацию посмотрел(https://www.postgresql.org/docs/12/sql-dropdatabase.html). Нашёл вот такой ответ - https://stackoverflow.com/questions/15256793/drop-or-create-database-from-stored-procedure-in-postgresql .
Вопрос- всё же прошло больше 8 лет, мб появилось более красивое и аккуратное решение как обойти это ограничение, нежели db_link?