2011-03-25 2 views

답변

15

RETURNING에 대한 주문을 보장하는 내용의 the documentation에는 아무 것도 표시되지 않으므로 나는 그것에 의지 할 수 있다고 생각하지 않습니다. 확율은 RETURNING 주문이 VALUES 주문과 일치하지만 VALUES이 어느 순서로 삽입 될지에 대한 보증을 표시하지 않습니다. VALUES은 거의 확실하게 왼쪽에서 오른쪽 순서로 삽입 될 것이지만, 다시 한 번, 문서화 된 보증은 없습니다.

또한 관계형 모델은 관계의 본질적인 특성보다는 사용자가 적용하는 순서에 따라 설정됩니다. 일반적으로, 순서를 명시 적으로 지정하는 방법이없는 경우, 암묵적인 순서는 없습니다.

요약 실행 : 표시되는 주문은 아마도 항상 발생하지만 실제로 보장되지는 않으므로 의존하지 마십시오.

+1

관계가 정렬되어 있지 않다는 것을 알고 있지만 'values'부분을 관계 또는 목록으로 모델링할지 여부를 알지 못했습니다. 나는 특별한 경우 일 수 있기를 기대합니다. (txt, id)를 반환하는 foo (txt) 값 ('a'), ('b'), ('c') 삽입에 약간의 낭비가 보인다. – FunctorSalad

+0

@FunctorSalad :'values'는 아마리스트로 취급되지만 어디에서나 보장됩니다.그리고'돌아 오는 것 '에서 주문을 처리하는 것이 당신의 병목 목이라면 아마 괜찮을 것입니다. –

+1

동의, * 절대적으로 * 의존하지 마십시오. PostgreSQL은 입력을 정렬 할 권한이 있지만 삽입 성능이 가장 좋습니다. 인덱스 구성 테이블을 구현하면 아마도 가능합니다. –

3

이 (가) 인 경우 9.1에 "writeable common table expressions"이 포함됩니다. 그 이름은 WITH syntax의 공식 이름입니다. (Wikipedia.)

이 새로운 기능은 당신이 별칭을 제공하는 WITH 내부에 INSERT ... RETURNING를 배치하도록해야하고, 보통 오래된 ORDER BY 절을 특정 순서로 그에 대한 다음 SELECT.

+2

이것은 흥미롭지 만 접선으로 만 관련되어 있습니다. 그것은 OP 순서가 INPUT 순서가 모호하지 않고 동등한'ORDER BY '로도 표현 될 수있을 때만 OP가 요구하는 것을 근사치로 사용할 수 있습니다. – Flimzy

7

문서가 완전히 분명하지 않지만, 상태 것을 수행합니다 INSERT 명령이 RETURNING 절을 포함

경우, 결과는 정의 된 열과 값을 포함하는 SELECT 문의 그것과 유사합니다 명령에 의해 삽입 된 행에 대해 계산 된 RETURNING 목록에 있습니다.

지금 "유사합니다"는 엄격한 보증하지 않으며, 나는 raised this for discussion on the mailing list을했습니다 ... 그러나 실제로는, PostgreSQL의이 RETURNING에서 값의 순서로 엉망이되지 않습니다. 너무 많은 앱이 입력과 똑같은 순서로 의존하기 때문에 우리가 최적화를 원할지라도 우리가 할 수있는 일은 없을 것입니다.

이렇게 ... INSERT INTO ... VALUES (...), (...), ... RETURNING ...의 경우 INSERT INTO ... SELECT ... ORDER BY ... RETURNING ...의 경우 결과 관계가 입력과 동일한 순서로 있다고 가정하는 것이 안전해야합니다.

관련 문제