2015-02-19 1 views
0

Я работаю с БД унаследованных Postgres, который использует определения столбцов следующим образом:Postgresql метки времени и будущие значения по умолчанию в HSQLDB

timestamp without time zone default (CURRENT_TIMESTAMP 
AT TIME ZONE 'UTC') 

и

timestamp without time zone default (CURRENT_TIMESTAMP 
AT TIME ZONE 'UTC' + 30 * interval '1 day') 

К сожалению, они не могут быть изменены. Целью последнего является то, что значение по умолчанию составляет 30 дней в будущем. Я пытаюсь добавить современную среду тестирования junit, используя hsqldb поверх нее.

Довести это в соответствии с HSQLDB, первое определение необходимо изменить:

timestamp without time zone default CURRENT_TIMESTAMP 
AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE 

Однако, попробуйте, как я могу, я не могу понять способ репликации столбец с добавлением 30 дней

+0

Использование другой СУБД для тестирования, чем в производстве, не очень хорошая идея. Недавний пример того, что может пойти не так, можно найти здесь: http://stackoverflow.com/q/28553532/330315 –

+0

Я согласен с вами, однако в этом случае ситуация диктует это –

ответ

0

Вы можете использовать триггер для такого рода значение по умолчанию:

CREATE TRIGGER t BEFORE INSERT ON the_table 
REFERENCING NEW AS newrow FOR EACH ROW 
BEGIN ATOMIC 
    SET newrow.the_column = CURRENT_TIMESTAMP AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE + INTERVAL '30' DAY; 
END 

Update: совместимость с PostgreSQL была расширена, чтобы принять значения в будущем. Пример

timestamp without time zone default (CURRENT_TIMESTAMP AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE + INTERVAL 30 DAY))