1

Temat: duży delete

witam,

jestem początkujący jeśli chodzi o postgresa

szukam sposobu na usunięcie dużej ilości danych z tabeli, w jednym delete nie bardzo mi to się wykonuje
chciałbym zrobic loopa i wycinac po kilka tysięcy tylko teraz jak sprawdzać czy mam jeszcze rekordy do usunięcia.
robienie counta po każdym delete zamorduje wydajność, w MS SQL jest funkcja systemowa @@rowcount która zwraca ile było usuniętych rekordów i mogę sprawdzać przy usuwaniu 1000 rekordów czy @@rowcount =1000 i jeśli nie to już nie ma co usówać, szukam czegoś takiego w postgresie.
no chyba, że robi się to zupełnie inaczej wink

rk

2

Odp: duży delete

W postgresie jest klauzula return którą możesz w funkcji plpgsql przypisać do zmiennej.
Ale takie usuwanie to raczej średni pomysł.
Jesli chcesz usunąć zawartośc całej tabeli to proponuję użyć polecenie TRUNCATE, zdecydowanie szybsze niż DELETE.
Jesli chcesz usunąć tylko niektóre wiersze to proponuję tak
1) stworzyć tabelę tymczasową w wierszami z tabeli oryginalnej, których nie chcesz usuwać (CREATE TABLE .. AS SELECT..)
2) Odtworzyć na tabeli tymczasowej indeksy, klucze itp itd. tak aby była zgodna z tabelą oryginalną.
3) usunąć lub zmienić nazwę tabeli oryginalnej
4) zmienić nazwę tabeli tymczasowej na taką jaką na początku miała tabela oryginalna

3

Odp: duży delete

Nie usuwam całej tabeli, widze dwaproblemy w twoim rozwiązaniu
-miejsce, jak tabela bedzie duża to może być problem
-co z insertami ktore wpadna pomiedzy kopia do nowej tabeli a zmianą nazwy tymczasowej, merge danych może być kosztowne

4

Odp: duży delete

Ostatnio edytowany przez rski (2011-05-16 09:17:52)