如何在PostgreSQL中没有任何条件的情况下从表中删除前几条记录?

Mad*_*dan 6 sql postgresql

我想从我的表中删除前500条记录,没有任何条件.

表定义如下:

CREATE TABLE txn_log
(
  txn_log_timestamp timestamp without time zone NOT NULL,
  txn_log_pgm_id character(6)
)
WITH (OIDS=FALSE);
Run Code Online (Sandbox Code Playgroud)

我这里没有任何主键.我试图删除使用

DELETE FROM txn_log LIMIT 500
Run Code Online (Sandbox Code Playgroud)

但它抛出错误:

错误:语法错误位于或接近"LIMIT"第1行:从TXN_LOG LIMIT删除5000 ^

**********错误**********

错误:"LIMIT"或附近的语法错误

有人可以建议我这样做吗?

Rob*_*ert 11

尝试使用LIMIT如下准备子查询

DELETE FROM txn_log
WHERE txn_log_pgm_id IN (SELECT txn_log_pgm_id
                         FROM txn_log
                         ORDER BY txn_log_timestamp asc
                         LIMIT 500)
Run Code Online (Sandbox Code Playgroud)

  • 在没有测试的情况下,你不应该在生产中做类似的事情 (5认同)

Viv*_* S. 7

DELETE
FROM txn_log
WHERE ctid IN (
        SELECT ctid
        FROM txn_log
        ORDER BY txn_log_timestamp limit 500
        )
Run Code Online (Sandbox Code Playgroud)

根据文档

ctid
表格中行版本的物理位置.请注意,尽管可以使用ctid非常快速地定位行版本,但每次更新或移动VACUUM FULL时,行的ctid都会更改.因此,ctid作为长期行标识符是无用的.应该使用OID,甚至更好的用户定义的序列号来标识逻辑行.