Ejemplo:¿INSERT RETURNING está garantizado para devolver las cosas en el orden "correcto"?
create table foo(
id serial,
txt text
);
insert into foo(txt) values ('a'),('b'),('c') returning id;
devoluciones:
id
----
1
2
3
(3 rows)
Se parece que el primeraid
en el valor de retorno será siempre el id
para 'a'
, el segundo para 'b'
y así sucesivamente, pero, ¿es este comportamiento definido de insert into
, o es una coincidencia que puede fallar en circunstancias extrañas?
Soy consciente de que las relaciones no están ordenadas, pero no estaba seguro de si la parte 'values' se debe modelar como una relación o una lista :) Esperaba que podría ser un caso especial, ya que el (orden- independiente) alternative 'insert into foo (txt) values (' a '), (' b '), (' c ') return (txt, id) 'parece un poco derrochador (supongo que estoy optimizando prematuramente de nuevo ...) – FunctorSalad
@FunctorSalad: Los 'valores' probablemente se tratan como una lista, pero no lo veo garantizado en ninguna parte.Y si se trata de la orden de 'devolver' el cuello de su botella de rendimiento, entonces probablemente esté bien :) –
De acuerdo, * absolutamente * no confíe en él. PostgreSQL está dentro de sus derechos para ordenar las entradas, sin embargo, resultaría en el mejor rendimiento de inserción, y si las tablas organizadas por índice alguna vez se implementan, probablemente lo hará. –