postgresql:更新最新插入行的快速方法

4

如何在不使用临时表的情况下修改最近添加的行呢?例如,表结构如下:

id | text | date

我的当前方法是使用PostgreSQL特定的命令“returning id”进行插入,以便稍后可以使用更新表:

update myTable set date='2013-11-11' where id = lastRow

然而我有一种感觉,postgresql不仅仅使用最后一行,而是在遍历数百万条记录直到找到"id = lastRow"。如何直接访问最后添加的行?


1
如果您在id列上有索引,Postgres(或任何其他DBMS)将不会遍历数百万行 - 它将执行相当快的索引查找。但真正的问题是:为什么您不能在原始插入语句中包含该日期值呢? - user330315
1
你目前的方法是正确的,如果你在“id”字段上有索引,那么它也是最快的之一。 - Ihor Romanchenko
经过一段时间的测试,我发现两个版本都很快。因此,您可以使用“返回ID”(这是PostgreSQL特定的)或我接受的解决方案。 - Anonymous
2个回答

5
update myTable date='2013-11-11' where id IN(
       SELECT max(id) FROM myTable
)

我在我的运行速度较慢的硬件上测试了这个程序,数据库中有超过1亿条记录,但它仍然能够快速运行。 - Anonymous
2
@mvb13,并发插入无法使用。您永远不应该依赖于序列中的数字被排序。 - Ihor Romanchenko
这是正确的。在我的情况下,它总是很简单明了(插入->可能修改),所以没有问题。 - Anonymous

4

补充mvb13的回答(由于我还没有足够的点数直接发表评论),有一个单词遗漏了。希望这能帮助某人节省一些时间来解决正确的语法,哈哈。

update myTable set date='2013-11-11' where id IN(
  SELECT max(id) FROM myTable
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接