Postgresql
December 31, 2022

PostgreSQL. Динамический SQL.

Такие задачи часто встречаются в реальной жизни, например, динамический PIVOT в t-sql, если число столбцов изначально неизвестно. В заметке речь именно про формирование и выполнение sql в коде, динамически формируемый код может быть сколько угодно сложным, это просто демонстрация такой возможности.

Всем рекомендую сначала вместо запуска execute вывести строку получившейся команды через raise notice.

Создаём табличку

create table stg.test_table (part_id int)
partition by list (part_id);

Создаём партиции

DO $
begin
for i in 1..10 loop
call stg.set_partition ('stg', 'test_table', i);
end loop;
end;
$;
--Проверяем, что партиции создались
select table_name t FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'stg'
and table_name like 'test_table%'
Видим 10 созданных партиций.

Удаляем свежесозданные партиции

DO $
declare
v_sql_str text;
r record;
begin
for r in (
select table_name t FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'stg'
and table_name like 'test_table_%'
) loop
v_sql_str := 'drop table stg.'||r.t || ';';
--RAISE NOTICE 'строка (%)', v_sql_str;
execute v_sql_str;
end loop;
end;
$;