按创建时间查询行?
我有一个不包含日期或时间相关字段的表。 仍然我想根据创建记录/行的时间来查询该表。 有没有办法在PostgreSQL中做到这一点?
我更喜欢直接在PostgreSQL中做出回答。 但是,如果这是不可能的,可以休眠做PostgreSQL?
基本上: 不 。 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
子句的任何订单。 上一篇: Query rows by time of creation?
下一篇: PHP memcache connect