按创建时间查询行?

时间:2012-07-27 17:53:12

标签: postgresql datetime

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

我更喜欢直接在PostgreSQL中做这个问题的答案。但是,如果这不可能,那么hibernate可以为PostgreSQL做吗?

1 个答案:

答案 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 FULLCLUSTER或..,则普通SELECT * FROM tbl会按顺序返回所有行进入了。但这非常不可靠并且依赖于实现。 PostgreSQL(与任何RDBMS一样)不保证没有ORDER BY子句的任何订单。