【问题标题】:Query rows by time of creation?按创建时间查询行?
【发布时间】:2012-07-26 10:38:56
【问题描述】:

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

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

【问题讨论】:

    标签: postgresql datetime


    【解决方案1】:

    基本上:没有。 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 子句的任何顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 2019-03-14
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      相关资源
      最近更新 更多