我有一个不包含日期或时间相关字段的表。我仍然想根据创建记录/行的时间来查询该表。有没有办法在 PostgreSQL 中做到这一点?
我更喜欢直接在 PostgreSQL 中执行此操作的答案。但如果那不可能,hibernate 可以为 PostgreSQL 做吗?
我有一个不包含日期或时间相关字段的表。我仍然想根据创建记录/行的时间来查询该表。有没有办法在 PostgreSQL 中做到这一点?
我更喜欢直接在 PostgreSQL 中执行此操作的答案。但如果那不可能,hibernate 可以为 PostgreSQL 做吗?
基本上:没有。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 FULL
orCLUSTER
或 .. ,则纯SELECT * FROM tbl
文本按输入顺序返回所有行。但这是非常不可靠且依赖于实现的。PostgreSQL(像任何 RDBMS 一样)不保证没有ORDER BY
子句的任何顺序。