>데이터 베이스 >MySQL 튜토리얼 >기본 키 없이 PostgreSQL에서 특정 개수의 정렬된 행을 삭제하는 방법은 무엇입니까?

기본 키 없이 PostgreSQL에서 특정 개수의 정렬된 행을 삭제하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-05 07:42:42369검색

How to Delete a Specific Number of Ordered Rows in PostgreSQL Without a Primary Key?

정렬 및 기본 키 없이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.