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

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

Linda Hamilton
Linda Hamilton원래의
2024-12-31 05:27:101025검색

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

PostgreSQL에서 정렬을 사용하여 고정된 수의 행 삭제

DELETE 구문의 제한으로 인해 PostgreSQL에서는 정렬을 사용하여 행을 삭제하는 것이 어려울 수 있습니다. 이 문제는 기본 키가 없기 때문에 더욱 복잡해지며 하위 쿼리 솔루션이 실용적이지 않습니다.

이 문제를 해결하려면 테이블 내 각 행의 고유 식별자인 ctid 필드를 활용할 수 있습니다. ctid를 활용하면 정렬 기준에 따라 삭제할 특정 행을 대상으로 하는 쿼리를 구성할 수 있습니다.

DELETE FROM ONLY logtable
WHERE ctid IN (
    SELECT ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);

ctid 필드는 각 행 버전에 대한 고유 식별자를 제공합니다. 그러나 VACUUM FULL로 행이 업데이트되거나 이동되면 변경될 수 있다는 점에 유의해야 합니다. 또한 로그 테이블에 상속된 테이블이 있는 경우 DELETE FROM ONLY 절을 사용하면 하위 테이블에서 행이 실수로 삭제되는 것을 방지할 수 있습니다.

로그 테이블이 분할된 경우 쿼리에 테이블로이드를 포함하여 전체 테이블에서만 삭제가 발생하도록 해야 합니다. 의도한 파티션:

DELETE FROM logtable
WHERE (tableoid,ctid) IN (
    SELECT tableoid,ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);

이러한 기술을 사용하면 정렬 기준에 따라 고정된 수의 행을 효과적으로 삭제하면서 보존할 수 있습니다. 정확한 삭제 동작을 통해 중복된 타임스탬프에 관계없이 지정된 수의 행이 제거되도록 합니다.

위 내용은 기본 키 없이 PostgreSQL에서 특정 개수의 정렬된 행을 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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