집 >데이터 베이스 >MySQL 튜토리얼 >기본 키 없이 PostgreSQL에서 특정 개수의 정렬된 행을 삭제하는 방법은 무엇입니까?
정렬 및 기본 키 없이 PostgreSQL에서 행 삭제 횟수 보존
PostgreSQL에서는 삭제 구문 포즈로 순서 지정 또는 제한을 결합할 수 없음 선택된 순서를 유지하면서 특정 수의 행을 삭제하려고 할 때 문제가 발생합니다. 이는 테이블에 기본 키가 없기 때문에 더욱 복잡해집니다.
해결책: ctid 활용
이러한 제한을 피하기 위해 ctid(현재 튜플 식별자) 행:
DELETE FROM ONLY logtable WHERE ctid IN ( SELECT ctid FROM logtable ORDER BY timestamp LIMIT 10 );
ctid는 각 행에 대한 고유 식별자를 제공합니다. 테이블 내의 행 버전입니다. 타임스탬프별로 정렬된 처음 10개 행의 ctid를 선택하고 DELETE 문에서 사용하면 모든 타임스탬프 값이 동일하더라도 원하는 행 수를 효과적으로 제거할 수 있습니다.
파티션 고려 테이블
로그 테이블이 분할된 경우 다음과 같은 행을 포함하는 여러 분할이 있을 가능성을 고려해야 합니다. 동일한 타임스탬프. 너무 많은 행이 삭제되는 것을 방지하기 위해 쿼리에 tableoid(테이블 식별자)를 포함할 수 있습니다.
DELETE FROM logtable WHERE (tableoid,ctid) IN ( SELECT tableoid,ctid FROM logtable ORDER BY timestamp LIMIT 10 );
이렇게 하면 삭제가 각 파티션 내에서 지정된 행 수로 제한됩니다.
ctid와 tableoid를 활용하면 기본 키가 없는 경우에도 PostgreSQL에서 정렬을 통해 고정된 수의 행을 삭제하는 원하는 기능을 구현할 수 있습니다.
위 내용은 기본 키 없이 PostgreSQL에서 특정 개수의 정렬된 행을 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!