#sql #postgresql #function
Вопрос:
Я хочу сменить владельца для всех таблиц в определенном table_catalog с функцией:
CREATE OR REPLACE function change_owner_table_catalog(catalog_arg varchar, owner_arg varchar)
RETURNS void AS $
DECLARE
table_name_value varchar;
sequence_name_value varchar;
BEGIN
for table_name_value in (SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_catalog = catalog_arg) loop
ALTER TABLE table_name_value OWNER TO owner_arg;
end loop;
END;
$ language plpgsql;
Я выполняю его:
select change_owner_table_catalog('cinema', 'cinema_user')
И есть следующая ошибка:
ОШИБКА: отношение «значение имя_таблицы» не существует КОНТЕКСТ: инструкция SQL «ИЗМЕНИТЬ ВЛАДЕЛЬЦА имени имя_таблицы ТАБЛИЦЫ НА имя владельца» PL/pgSQL функция change_owner_table_catalog(изменение символов,изменение символов) строка 7 в инструкции SQL Состояние SQL: 42P01
Ответ №1:
Вам нужен динамический SQL, так ALTER TABLE
как он не поддерживает параметры:
EXECUTE format('ALTER TABLE public.%I OWNER TO %I', table_name_value, owner_arg);