[SQL] 어떻게 PostgreSQL을에 정렬과 행의 고정 번호를 삭제합니까?
SQL어떻게 PostgreSQL을에 정렬과 행의 고정 번호를 삭제합니까?
나는 포트에 PostgreSQL을에 오래된 MySQL의 쿼리를하려고 해요,하지만 난이 하나에 문제가 :
DELETE FROM logtable ORDER BY timestamp LIMIT 10;
PostgreSQL은 자사의 삭제 구문 주문 또는 제한을 허용하지 않습니다, 나는 하위 쿼리를 사용할 수 있도록 테이블에 기본 키가 없습니다. 그것은 중요하지 않습니다 있지만, 테이블 30 개 행을 포함하지만 그들은 모두 같은 타임 스탬프가있는 경우, 예를 들어, 난 여전히 10을 삭제하려면 - 또한, 나는 쿼리가 정확히 주어진 번호 또는 기록이 삭제 동작을 유지하려면 이는 10.
그래서; 어떻게 PostgreSQL을에 정렬과 행의 고정 번호를 삭제합니까?
편집 : log_id 열 또는 유사한 더가 없습니다 기본 키 의미합니다. 아, 레거시 시스템의 기쁨!
해결법
-
==============================
1.당신은 CTID를 사용하여 시도해 볼 수도 있습니다 :
당신은 CTID를 사용하여 시도해 볼 수도 있습니다 :
DELETE FROM logtable WHERE ctid IN ( SELECT ctid FROM logtable ORDER BY timestamp LIMIT 10 )
CTID은 다음과 같습니다
이 또한 OID입니다하지만 당신은 테이블을 만들 때 특별히 요청하는 경우 그에만 존재한다.
-
==============================
2.포스트 그레스 문서 사용 배열 대신 IN과 하위 쿼리에 좋습니다. 이 훨씬 빠르게 작동합니다
포스트 그레스 문서 사용 배열 대신 IN과 하위 쿼리에 좋습니다. 이 훨씬 빠르게 작동합니다
DELETE FROM logtable WHERE id = any (array(SELECT id FROM logtable ORDER BY timestamp LIMIT 10));
이것과 다른 트릭은 여기에서 찾을 수 있습니다
-
==============================
3.
delete from logtable where log_id in ( select log_id from logtable order by timestamp limit 10);
-
==============================
4.당신은 당신이 할 수있는 (순서없이) 모든 10 개 개의 레코드를 삭제할 가정 :
당신은 당신이 할 수있는 (순서없이) 모든 10 개 개의 레코드를 삭제할 가정 :
DELETE FROM logtable as t1 WHERE t1.ctid < (select t2.ctid from logtable as t2 where (Select count(*) from logtable t3 where t3.ctid < t2.ctid ) = 10 LIMIT 1);
내 사용 사례를 들어, 10M의 레코드를 삭제이 빠른 것으로 밝혀졌다.
-
==============================
5.당신은 각각의 라인에 대한 삭제를 통해 루프 절차를 쓸 수, 절차는 삭제할 항목의 수를 지정하는 매개 변수를 걸릴 수 있습니다. 그러나 그것은 MySQL의에 비해 조금 잔인한 사람입니다.
당신은 각각의 라인에 대한 삭제를 통해 루프 절차를 쓸 수, 절차는 삭제할 항목의 수를 지정하는 매개 변수를 걸릴 수 있습니다. 그러나 그것은 MySQL의에 비해 조금 잔인한 사람입니다.
-
==============================
6.기본 키가없는 경우는 복합 키 배열 어디 IN 구문을 사용할 수 있습니다.
기본 키가없는 경우는 복합 키 배열 어디 IN 구문을 사용할 수 있습니다.
delete from table1 where (schema,id,lac,cid) in (select schema,id,lac,cid from table1 where lac = 0 limit 1000);
이것은 나를 위해 일했다.
from https://stackoverflow.com/questions/5170546/how-do-i-delete-a-fixed-number-of-rows-with-sorting-in-postgresql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 SELECT 마지막 N 행 (0) | 2020.05.07 |
---|---|
[SQL] 데이터베이스 커서를 사용의 이점은 무엇입니까? (0) | 2020.05.07 |
[SQL] 우리는 SQL에서보기로 매개 변수를 전달할 수 있습니까? (0) | 2020.05.07 |
[SQL] SQL WHERE ID IN (ID1, ID2, ..., IDN) (0) | 2020.05.07 |
[SQL] MYSQL을 사용하여 난수를 생성 (0) | 2020.05.07 |