2014-11-23 1 views
-1

글쎄, 내 문제는 내가 행을 업데이트 할 때마다이 행이 테이블의 마지막 위치로 이동한다는 것입니다. 전에 있던 장소는 중요하지 않습니다.업데이트 된 행을 PostgreSQL이 마지막 행으로 배치하는 것을 피할 수있는 방법이 있습니까?

나는이 게시물 Postgresql: row number changes on update에서 관계형 테이블의 행이 정렬되지 않았 음을 읽었습니다. 그렇다면 왜 내가 select * from table;을 실행할 때 항상 같은 순서를 얻나요?

어쨌든, 나는 마지막 문장에 업데이트 문장을 놓지 않는 방법이 있는지 알기 위해 그것에 대한 토론을 시작하고 싶지 않습니다. 추가 정보를

편집 :

은 정말 모든 모든 결과를 얻을 싶지 않아요. 나는 자바에서 2 개의 버튼을 프로그래밍했는데, nextprevious이고, 여전히 초심자이기 때문에 다음 또는 이전 행을 가져와야하는 유일한 방법은 select * from table limit 1을 사용하고 클릭 한 버튼에 따라 offset num++ 또는 offset num--을 추가하는 것이 었습니다. 따라서 업데이트를 실행하면 초기 주문 (게재 신청서)이 손실됩니다.

감사합니다.

+5

실제로 테이블에 순서가 없습니다. 물론 매번 * 무작위 순서로 결과를 얻지는 못합니다. 시스템은 결정 론적이고 의도적으로 순서를 무작위로 추출하지 않습니다. 그러나 주문한 결과를 원하면 명시 적으로 주문해야합니다. 그렇지 않으면 순서가 보장되거나 정의되지 않습니다. – deceze

+1

"* 그런 다음 왜 select * from 테이블을 실행할 때 항상 같은 순서를 사용합니까? *"- 간단한 대답 : 그렇지 않습니다. –

+0

@a_horse_with_no_name 요점은 내가 그렇다는 것입니다. – Drumnbass

답변

0

업데이트를 위해 테이블에 약간의 공간을 만들 수 있습니다. 채우기 비율을 기본값 인 100 %에서 변경하여 페이지에 남아있는 업데이트 공간을 없애고 업데이트 공간을 적게 만듭니다. manual (테이블을 생성)에서

:

FILLFACTOR (정수)

테이블의 FILLFACTOR 백분율 (10) 및 (100) 100 (완전 포장) 사이 기본값입니다. fillfactor가 더 작 으면 INSERT 작업은 표시된 백분율에만 표 페이지 을 압축합니다. 각 페이지의 나머지 공간은 해당 페이지의 행을 업데이트하기 위해 예약 된 입니다. 이렇게하면 의 업데이트 된 행 사본을 원래 페이지와 동일한 페이지에 배치하여 다른 페이지에 배치하는 것보다 더 효율적입니다 ( ). 항목이 업데이트되지 않는 테이블의 경우 전체 포장이 중에서 가장 적합하지만 업데이트가 많은 테이블에서는 작은 fillfactors가 으로 적절합니다. 이 매개 변수는 TOAST 테이블에 대해 설정할 수 없습니다.

그러나 쿼리에 ORDER BY가 없으면 결과 집합을 예상대로 정렬 할 수 있다고 보장 할 수 없습니다. 채우기 요소가 변경 될 수 없습니다.

관련 문제