Mam stół postgres. Muszę usunąć z niego niektóre dane.
Zakładam, że ...
delete from yourtable
where <condition(s)>
... nie zadziała z jakiegoś powodu. (Chcesz podzielić się tym powodem?)
Zamierzałem utworzyć tymczasową tabelę, skopiować dane, odtworzyć indeksy i usunąć potrzebne wiersze.
Zajrzyj do pg_dump i pg_restore. Używanie pg_dump z kilkoma sprytnymi opcjami i być może edycja wyniku przed pg_restoring może załatwić sprawę.
Ponieważ wykonujesz analizę danych typu „a co, jeśli”, zastanawiam się, czy nie byłoby lepiej, gdybyś korzystał z widoków.
Możesz zdefiniować widok dla każdego scenariusza, który chcesz przetestować, na podstawie negacji tego, co chcesz wykluczyć. To znaczy zdefiniuj widok na podstawie tego, co chcesz uwzględnić. Na przykład, jeśli chcesz mieć „okno” na danych, w którym „usunąłeś” wiersze, w których X = Y, to utworzyłbyś widok jako wiersze, w których (X! = Y).
Widoki są przechowywane w bazie danych (w katalogu systemowym) jako ich definiujące zapytanie. Za każdym razem, gdy wysyłasz zapytanie do widoku, serwer bazy danych wyszukuje podstawowe zapytanie, które go definiuje i wykonuje to (połączone operatorem AND z innymi użytymi warunkami). Takie podejście ma kilka zalet:
- Nigdy nie kopiujesz żadnej części swoich danych.
- Indeksy, które są już używane dla tabeli bazowej (pierwotnej, „rzeczywistej” tabeli) zostaną użyte (zgodnie z optymalizatorem zapytań) podczas wykonywania zapytań do każdego widoku / scenariusza. Nie ma potrzeby ich redefiniowania ani kopiowania.
- Ponieważ widok jest „oknem” (NIE obrazem) „rzeczywistych” danych w tabeli bazowej, możesz dodawać / aktualizować / usuwać w tabeli podstawowej i po prostu ponownie sprawdzać scenariusze widoku bez konieczności ponownego tworzenia dane zmieniają się w czasie.
Oczywiście istnieje kompromis. Ponieważ widok jest tabelą wirtualną, a nie „prawdziwą” (podstawową) tabelą, w rzeczywistości wykonujesz (być może złożone) zapytanie za każdym razem, gdy uzyskujesz do niego dostęp. Może to trochę spowolnić. Ale może nie. Zależy to od wielu kwestii (rozmiar i charakter danych, jakość statystyk w katalogu systemowym, szybkość sprzętu, obciążenie użytkowe i wiele innych). Nie dowiesz się, dopóki tego nie spróbujesz. Jeśli (i tylko jeśli) rzeczywiście okaże się, że wydajność jest niedopuszczalnie wolna, możesz rozważyć inne opcje. (Zmaterializowane widoki, kopie tabel, ... wszystko, co zamienia przestrzeń na czas.)