9

我有一个不包含日期或时间相关字段的表。我仍然想根据创建记录/行的时间来查询该表。有没有办法在 PostgreSQL 中做到这一点?

我更喜欢直接在 PostgreSQL 中执行此操作的答案。但如果那不可能,hibernate 可以为 PostgreSQL 做吗?

4

1 回答 1

6

基本上:没有。PostgreSQL 中的行没有自动时间戳。

我通常在我的表中添加这样的列(忽略时区):

ALTER TABLE tbl ADD COLUMN log_in timestamp DEFAULT localtimestamp NOT NULL;

只要您不操纵该列中的值,您就会获得创建时间戳。您可以添加触发器和/或限制写入权限以避免对值进行调整。

二等舱选项

  • 如果您有一个序列列,您至少可以以某种概率判断输入行的顺序。这不是 100% 可靠的,因为可以手动更改值,并且应用程序可以从序列中获取值并且INSERT是无序的。

  • 如果您创建了 table WITH (OIDS=TRUE),那么 OID 列可能是一些指示 - 除非您的数据库被大量编写和/或非常旧,那么您可能已经经历了 OID 环绕,并且后面的行可能具有较小的 OID。这就是为什么这个功能几乎不再使用的原因之一。

    默认取决于default_with_oids我引用手册的设置:

该参数默认关闭;在 PostgreSQL 8.0 和更早的版本中,它默认是打开的。

  • 如果您没有更新您的行或经历转储/恢复周期,或运行VACUUM FULLorCLUSTER或 .. ,则纯SELECT * FROM tbl文本按输入顺序返回所有行。但这是非常不可靠且依赖于实现的。PostgreSQL(像任何 RDBMS 一样)不保证没有ORDER BY子句的任何顺序。
于 2012-07-28T05:28:15.017 回答