Я создаю сценарий оболочки для импорта журналов PostgreSQL в таблицу с использованием разбиения по месяцам.
Я пытаюсь создать функцию log_insert
с параметром $DATE
.
Функция создана успешно, и журналы импортируются в соответствующие таблицы месяцев, когда я жестко кодирую имя таблицы postgres_log_jun
:
CREATE LANGUAGE plpgsql;
create or replace function logs_insert() returns trigger as $$
declare
begin
if ( new.log_time >= date_trunc('month', current_date) and new.log_time <= date_trunc('month',current_date)+'1month'::interval-'1day'::interval) then
insert into postgres_log_jun values (new.*);
else
raise exception 'log_time date out of range';
end if;
return null;
end;
$$ language plpgsql;
Но то же самое я пытаюсь после объявления переменной датыгде:
EXPORT DATE=$(date +%^b)
EXPORT DATABASE=demo
psql -d $DATABASE << 'EOF'
CREATE LANGUAGE plpgsql;
create or replace function logs_insert() returns trigger as $$
declare
tbl_var text := 'postgres_log_$DATE';
begin
if ( new.log_time >= date_trunc('month', current_date) and new.log_time <= date_trunc('month',current_date)+'1month'::interval-'1day'::interval) then
EXECUTE'
insert into ' || quote_ident(tbl_var) || ' values ' (new.*);
else
raise exception 'log_time date out of range';
end if;
return null;
end;
$$ language plpgsql;"
EOF
Однако это не работает.
Может кто-нибудь помочь мне решить эту проблему?
Спасибо за вашу поддержку.