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%'
Удаляем свежесозданные партиции
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; $;