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 时间戳和未来默认值的主要内容,如果未能解决你的问题,请参考以下文章
通过 Windows ODBC PostgreSQL 驱动程序连接到 HSQLDB 2.5