【发布时间】:2012-07-26 10:38:56
【问题描述】:
我有一个不包含日期或时间相关字段的表。我仍然想根据创建记录/行的时间来查询该表。有没有办法在 PostgreSQL 中做到这一点?
我更喜欢直接在 PostgreSQL 中执行此操作的答案。但如果这不可能,hibernate 可以为 PostgreSQL 做吗?
【问题讨论】:
标签: postgresql datetime
我有一个不包含日期或时间相关字段的表。我仍然想根据创建记录/行的时间来查询该表。有没有办法在 PostgreSQL 中做到这一点?
我更喜欢直接在 PostgreSQL 中执行此操作的答案。但如果这不可能,hibernate 可以为 PostgreSQL 做吗?
【问题讨论】:
标签: postgresql datetime
基本上:没有。 PostgreSQL 中的行没有自动时间戳。
我通常在表格中添加这样的列(忽略时区):
ALTER TABLE tbl ADD COLUMN log_in timestamp DEFAULT localtimestamp NOT NULL;
只要您不操纵该列中的值,您就会获得创建时间戳。您可以添加触发器和/或限制写入权限以避免对值进行调整。
如果您有一个序列列,您至少可以以 一些 的概率判断输入行的顺序。这不是 100% 可靠的,因为这些值可以手动更改,并且应用程序可以从序列和INSERT 乱序中获取值。
如果您创建了表 WITH (OIDS=TRUE),那么 OID 列可能是一些指示 - 除非您的数据库被大量编写和/或非常旧,否则您可能已经经历了 OID 环绕,并且后面的行可以有一个较小的OID。这就是为什么这个功能几乎不再使用的原因之一。
默认取决于default_with_oids的设置我引用手册:
该参数默认关闭;在 PostgreSQL 8.0 和更早的版本中,它是 默认开启。
VACUUM FULL 或 CLUSTER 或 ..,则普通的 SELECT * FROM tbl 按输入顺序返回所有行。但这是非常不可靠且依赖于实现的。 PostgreSQL(与任何 RDBMS 一样)不保证没有 ORDER BY 子句的任何顺序。【讨论】: