Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql:更新最新插入行的快速方法_Sql_Postgresql - Fatal编程技术网

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

postgresql:更新最新插入行的快速方法,sql,postgresql,Sql,Postgresql,在不使用临时表的情况下修改最新添加的行的最佳方法是什么。 例如,表格结构是 id | text | date 我目前的方法是使用特定于postgresql的命令“returning id”进行插入,这样我就可以在以后使用 update myTable set date='2013-11-11' where id = lastRow 然而,我感觉postgresql并不是简单地使用最后一行,而是在数百万个条目中迭代,直到找到“id=lastRow”。如何直接访问最后添加的行?只需添加到mvb1

在不使用临时表的情况下修改最新添加的行的最佳方法是什么。 例如,表格结构是

id | text | date
我目前的方法是使用特定于postgresql的命令“returning id”进行插入,这样我就可以在以后使用

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

然而,我感觉postgresql并不是简单地使用最后一行,而是在数百万个条目中迭代,直到找到“id=lastRow”。如何直接访问最后添加的行?

只需添加到mvb13的答案中(因为我还没有足够的分数直接评论),缺少一个单词。希望,这将节省一些时间,从制定正确的语法LOL的人

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

如果您在
id
列上有一个索引,Postgres(或任何其他DBMS)将不会遍历数百万行—它将执行非常快速的索引查找。但真正的问题是:为什么不能在原始insert语句中包含该日期值?您当前的方法是正确的,并且是最快的方法之一(如果您在
id
字段上有索引),经过一段时间的测试,我发现这两个版本都很快。因此,您可以使用“returning id”(特定于postgresql)或我接受的解决方案。我在运行速度较慢的数据库上测试了这一点,该数据库具有超过100.000.000个条目,并且可以正常工作fast@mvb13它不适用于并发插入。你绝对不能依赖序列中的数字来排序。这是真的。在我的例子中,它始终是直接的(插入->可能修改),所以没有问题。