답변:
이 간단한 경우에 대한 대답은 예 입니다. VALUES
표현식 에서 제공된 순서대로 행이 삽입됩니다 . 그리고 id
열이 serial
유형 인 경우 기본 순서의 값이 순서대로 페치됩니다.
그러나 이것은 구현 세부 사항이며 보장은 없습니다. 특히, 순서는 WHERE
조건이나 조인이 있는 더 복잡한 쿼리에서 반드시 유지되지는 않습니다 .
동시에 같은 테이블에 동시 트랜잭션을 쓰는 경우 간격이나 다른 행이 혼합 될 수 있습니다. 가능하지는 않지만 가능합니다.
데이터베이스 테이블에는 "자연"순서가 없습니다. 실제 열 순서 ( 시스템 열에ctid
반영됨 )는 처음에 삽입 된 순서와 일치하지만 언제든지 변경 될 수 있습니다. UPDATE
, DELETE
, VACUUM
및 다른 명령 행의 물리적 순서를 변경할 수 있습니다. 그러나 생성 된 값 id
은 안정적이며 어떤 식으로도 연결되지 않습니다.
serial
열 - 이상적으로 동일한 트랜잭션에서.
WHERE
조건이있는 보다 복잡한 쿼리에는 해당되지 않습니다 . WHERE
행 순서를 변경하는 일반 조건은 생각할 수 없지만 조인은 확실히 그렇게 할 수 있습니다.
어떤 경우에는 Erwin Brandstetter의 답변 이 정확하지 않을 수 있습니다.
우리는 짓을했는지 INSERT INTO ... SELECT bar,baz FROM foo ORDER BY bar
우리는 볼
SELECT ctid,* FROM foo
테이블에있는 행의 실제 순서가 정확히 삽입 순서와 일치하지 않음을 보여줍니다, 그것은 조금을 스크램블 보인다. 테이블에는 데이터 크기가 매우 큰 jsonb 열이 있습니다. 삽입 중에 실험적으로 jsonb 데이터를 절단하면 삽입 순서가 정확했습니다.