Одна из наших таблиц Postgres, называемая rep_event, имеет столбец отметки времени, который указывает, когда была вставлена каждая строка. Но все строки имеют значение временной метки 2000-01-01 00:00:00, поэтому что-то настроено неправильно.
Существует функция, которая вставляет строки в таблицу, и это единственный код, который вставляет строки в эту таблицу - никакой другой код не вставляет в эту таблицу. (Также нет кода, который обновляет строки в этой таблице.) Вот определение функции:
CREATE FUNCTION handle_event() RETURNS "trigger"
AS $$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO rep_event SELECT 'D', TG_RELNAME, OLD.object_id, now();
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO rep_event SELECT 'U', TG_RELNAME, NEW.object_id, now();
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO rep_event SELECT 'I', TG_RELNAME, NEW.object_id, now();
RETURN NEW;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
Вот определение таблицы:
CREATE TABLE rep_event
(
operation character(1) NOT NULL,
table_name text NOT NULL,
object_id bigint NOT NULL,
time_stamp timestamp without time zone NOT NULL
)
Как видите, функция now () вызывается для получения текущего времени. Выполнение «select now ()» в базе данных возвращает правильное время, поэтому есть ли проблема с вызовом now () из функции?