Добрый день.
Пытаюсь сделать вот что: есть таблица actions в postgreSQL, одно из полей которой, с именем ts, имеет тип timestamp without time zone. Я хочу вставить запись, соответствующее поле в которой представлено в виде Unix time.
В Postgre реализована функция to_timestamp(num), умеющая необходимое преобразование:
select to_timestamp from to_timestamp(1291626067);
to_timestamp
------------------------
2010-12-06 12:01:07+03
(1 row)
Пишу примитивнейшую функцию и пытаюсь прикрутить её к триггеру:
CREATE FUNCTION trigger_epoch_to_datetime_ins() returns trigger as $$
begin
NEW.ts= to_timestamp(NEW.ts);
return NEW;
end
$$ language 'plpgsql';
CREATE TRIGGER fromunix before INSERT on actions
for each row execute PROCEDURE trigger_epoch_to_datetime_ins();
однако, при попытке вставить запись, выскакивает ошибка:
ERROR: invalid input syntax for type timestamp: "1291626067" at character 40
STATEMENT: INSERT INTO public.actions(ts) VALUES ('1291626067'::timestamp without time zone)
Такое впечатление, что триггер либо не исполняется, либо сперва идёт проверка вставляемого значения, а потом только данные передаются триггеру.
Что тут неправильно и можно ли сделать то, что я хочу?
Второй вопрос: можно ли триггером организовать алиасы и, направляя запись в несуществующее поле, на самом деле вставлять данные в поле созданное с другим именем?