Postgree, usuwanie duplikatów z bazy

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

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
0

Witam,

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

Pozdrawiam,

mr-owl

0
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 */);

1 użytkowników online, w tym zalogowanych: 0, gości: 1