【问题标题】:Postgresql timestamp and future default values in HSQLDBHSQLDB 中的 Postgresql 时间戳和未来默认值
【发布时间】: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 进行测试并不是一个好主意。最近的一个可能出错的例子是:stackoverflow.com/q/28553532/330315
  • 我同意你的观点,但是,在这种情况下,情况决定了它

标签: postgresql hsqldb


【解决方案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 版本中有效,但在更高版本中无效。将在下一个版本中再次支持。
猜你喜欢
  • 2011-08-20
  • 2018-01-13
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多