Postgresql时间戳和HSQLDB中的未来默认值

Postgresql时间戳和HSQLDB中的未来默认值,postgresql,hsqldb,Postgresql,Hsqldb,我正在使用一个使用列定义的传统postgres db,如下所示: timestamp without time zone default (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') 及 不幸的是,这些都无法改变。 后者的目标是默认值为未来30天。 我正试图在上面添加一个使用hsqldb的现代junit测试框架 为了使其与hsqldb保持一致,需要将第一个定义更改为: timestamp without time zone default CURRENT_TI

我正在使用一个使用列定义的传统postgres db,如下所示:

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

不幸的是,这些都无法改变。 后者的目标是默认值为未来30天。 我正试图在上面添加一个使用hsqldb的现代junit测试框架

为了使其与hsqldb保持一致,需要将第一个定义更改为:

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

但是,尽管我可能会尝试,但我无法找到一种方法,通过添加30天来复制列

您可以对这种默认值使用触发器:

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
更新:PostgreSQL兼容性已扩展到将来接受值。范例

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

使用不同于生产环境的DBMS进行测试并不是一个好主意。最近的一个可能出错的例子是:我同意你的看法,但是,在这种情况下,情况表明Itodly,HSQL数据库管理器在expires timestamp0的左括号中加上时区默认的当前时间戳,时区间隔为“0:00”小时到分钟+间隔1小时不为空。谢谢。Postgres样式的默认值在版本2.3.3中有效,但由于一些代码更改,在更高版本中无效。将在下一版本中再次支持。
timestamp without time zone default (CURRENT_TIMESTAMP AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE + INTERVAL 30 DAY))