例子:INSERT RETURNING是否保证以“正确”的顺序返回事物?
create table foo(
id serial,
txt text
);
insert into foo(txt) values ('a'),('b'),('c') returning id;
返回:
id
----
1
2
3
(3 rows)
它似乎,在返回值的第一id
永远是id
为'a'
,第二次为'b'
等等,但这是否定义为insert into
的行为,还是在奇怪的情况下可能会失败的巧合?
我知道关系是无序的,但我不确定是否将'values'部分建模为关系或列表:)我希望这可能是一个特例,因为(order- ('t'),('b'),('c')返回(txt,id)'看起来有些浪费(猜测我正在过早地再次优化......) – FunctorSalad 2011-03-27 17:26:15
@FunctorSalad:'values'可能被视为一个列表,但我不认为它在任何地方都有保证。如果处理来自“回归”的命令是你的表现瓶颈,那么你可能会做得很好:) – 2011-03-27 20:28:10
同意,*绝对*不要依赖它。 PostgreSQL完全有权对输入进行排序,但是会产生最佳的插入性能,并且如果实现了索引组织表,它可能会实现。 – 2014-02-01 12:35:38