我试图把一些旧的MySQL查询到Postgresql,但我有麻烦这一个:
DELETE FROM logtable ORDER BY timestamp LIMIT 10;@H_502_2@Postgresql不允许在其删除语法中的排序或限制,并且表没有主键,因此我不能使用子查询。此外,我想保留查询完全删除给定数字或记录的行为 – 例如,如果表包含30行,但它们都有相同的时间戳,我仍然要删除10,虽然它不重要其中10。
所以;如何在Postgresql中通过排序删除固定数量的行?
编辑:没有主键意味着没有log_id列或类似。啊,传统系统的快乐!
你可以尝试使用
ctid
:
DELETE FROM logtable WHERE ctid IN ( SELECT ctid FROM logtable ORDER BY timestamp LIMIT 10 )@H_502_2@ctid是:
The physical location of the row version within its table. Note that although the
ctid
can be used to locate the row version very quickly,a row’sctid
will change if it is updated or moved byVACUUM FULL
. Thereforectid
is useless as a long-term row identifier.还有oid,但只有存在,如果你特别要求,当你创建表。