【发布时间】:2019-01-17 02:12:35
【问题描述】:
我正在运行 Postgres 10.01 版
psql -V
psql (PostgreSQL) 10.5
我有一个表 mytable 大约有 2.5 亿行 - 我的目标是创建一个新表 newtable 并将大约一半的 mytable 复制到 newtable (SELECT * WHERE time > '2019-01-01 ),然后删除我从mytable复制的记录
当然,我想将所有索引保留在mytable
在psql 中执行此操作的最有效命令是什么? TRUNCATE TABLE 很有效,但会删除所有行。 DELETE 可能会花费大量时间并阻止插入发生(每 10 分钟安排一次插入)
任何建议都会有所帮助
【问题讨论】:
-
将所有行插入到新表中,然后执行 INNER JOIN 删除
-
不相关,但是:
psql -V打印命令行实用程序psql的版本。它不是 Postgres server 的版本。这只能通过运行select version();可靠地获得 -
DELETE不会阻止插入 -
如果你已经创建了一个分区表,那就很简单了。
标签: sql postgresql