我有一个不包含日期或时间相关字段的表。我仍然想根据创建记录/行的时间来查询该表。有没有办法在PostgreSQL中执行此操作?
我更喜欢直接在PostgreSQL中做这个问题的答案。但是,如果这不可能,那么hibernate可以为PostgreSQL做吗?
答案 0 :(得分:5)
基本上:不。 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
子句的任何订单。