Я пытался следовать этому ответу
Динамический запрос UNION ALL в Postgres
но я получаю
ОШИБКА: синтаксическая ошибка в или около "записи"
DECLARE
rec record;
strSQL text;
BEGIN
FOR
rec in
select table_name
from
information_schema.tables
where
table_name like 'history%'
loop
strSQL : = strSQL || 'Select * from' || rec.table_schema ||'.'|| rec.table_name || ' UNION ';
end loop;
-- remove last ' UNION ' from strSQL
--strSQL := 'Select row_number() over(order by rowid ) as row_num from (' || strSQL || ')';
execute strSQL;
У кого-нибудь есть идеи?
фон:
Таблица истории перемещается каждую ночь в свою таблицу с добавленной датой.
Итак, history04242018 для каждого имени таблицы, есть ли лучший способ получить данные за несколько дней?
edit: в таблицах всегда будет одинаковое количество столбцов, поэтому объединение должно быть в порядке.
edit2: у меня есть доступ только для чтения.
обновление
с предложением использования блока анонимного кода я теперь использую следующее:
DO
$$
declare
strSQL text;
begin
select
string_agg(format('select * from %I.%I', table_schema, table_name), E' union\n')
into strSQL
from information_schema.tables
where table_name like 'history%';
execute strSQL ;
end $$;
однако теперь я получаю ошибку
Ошибка описания: не удалось получить план (ы) EXPLAIN: ОШИБКА: синтаксис
ошибка в или около позиции "DO": 58
0 записей затронуто