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

Posted

技术标签:

【中文标题】HSQLDB 中的 Postgresql 时间戳和未来默认值【英文标题】:Postgresql timestamp and future default values in HSQLDB 【发布时间】:2015-02-19 20:45:42 【问题描述】:

我正在使用一个旧的 postgres 数据库,它使用如下列定义:

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 天。 我正在尝试在其上添加一个使用 hsqldb 的现代 junit 测试框架。

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

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

但是,尽我所能,我想不出一种方法来复制列添加 30 天

【问题讨论】:

使用与生产环境不同的 DBMS 进行测试并不是一个好主意。最近的一个可能出错的例子是:***.com/q/28553532/330315 我同意你的观点,但是,在这种情况下,情况决定了它 【参考方案1】:

您可以使用 TRIGGER 作为这种默认值:

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))

【讨论】:

奇怪的是,HSQL 数据库管理器在 expires timestamp(0) with time zone default (CURRENT_TIMESTAMP AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE + INTERVAL 1 hour) not null 的左括号上出错了。 谢谢。由于一些代码更改,Postgres 样式默认在 2.3.3 版本中有效,但在更高版本中无效。将在下一个版本中再次支持。

以上是关于HSQLDB 中的 Postgresql 时间戳和未来默认值的主要内容,如果未能解决你的问题,请参考以下文章