Postgree, usuwanie duplikatów z bazy

Postgree, usuwanie duplikatów z bazy
NE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Witam!
W bazie o poniższej strukturze chciałbym pozbyć się duplikatów, próbowałem to zrobić w programie niestety przy kilkuset tysiącach rekordów jest to bardzo powolny proces
w związku z tym zacząłem szukać działającego sposobu na usunięcie duplikatów z poziomy bazy. Niestety rozwiązania wyszukane przeze mnie nie zadziałały.
TABLE artukuly
id_artykulu serial NOT NULL, PK
link text NOT NULL

TABLE pozycje
id_zdania serial NOT NULL,
id_slowa serial NOT NULL,
pozycja integer NOT NULL

TABLE slowa (
id_slowa serial NOT NULL, PK
slowo text NOT NULL,
ilosc_wystapien integer NOT NULL,
istnieje boolean NOT NULL

TABLE zdania (
id_zdania serial NOT NULL,
id_artykulu serial NOT NULL, FK
zdanie text NOT NULL
);

P.S. Znajomy podpowiedział mi że można zrobić to robiąc duplikat bazy, czyszcząc oryginał i procedurą przerzucać do oryginału sprawdzając czy nie ma duplikatów

  • Rejestracja: dni
  • Ostatnio: dni
0
  1. stwórz nowe tabele typu artykuly2
  2. wywołaj

INSERT INTO artykuly2 SELECT DISTINCT * FROM artykuly;

  1. usuń tabele z początku
  2. zmień nazwy nowych tabel
  3. dodaj unique constraint na polach które nie chcesz żeby się duplikowały
mr-owl
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 206
0

Witam,

Zawsze można popracować z http://www.postgresql.org/docs/8.3/static/ddl-system-columns.html

Pozdrawiam,

mr-owl

katelx
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Hong Kong
0
Kopiuj
DELETE FROM tabela WHERE ctid NOT IN (SELECT MAX(t.ctid) FROM tabela t GROUP BY /* tu oddzielona przecinkami lista kolumn ktore maja byc unikatowe */);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.