pushLog
funkcja zatwierdza każdą wstawkę osobno, a zatwierdzanie jest powolne.
Jak wyjaśniono w dokumentacji Wypełnianie bazy danych :
Również:
Jednak w twoim przypadku byłby to raczej problem niż korzyść, ponieważ każda WSTAWIENIE może się nie powieść w przypadku naruszenia klucza podstawowego, anulując w ten sposób poprzednie WSTAWKI od ostatniego zatwierdzenia. Zauważ, że byłby to również problem z KOPIUJ , jeśli tego użyjesz.
Ponieważ naprawdę konieczne jest grupowanie zapytań w transakcjach w celu zapewnienia wydajności, musisz radzić sobie z naruszeniami klucza podstawowego w sposób, który nie przerywa transakcji.
Zwykle stosuje się dwie metody:
-
Unikaj błędu:
INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)
-
Złap błąd, wstawiając go do funkcji plpgsql, która ma blok WYJĄTEK ignorujący itr. Konkretne WKŁADKI powodujące duplikat zostaną anulowane, ale transakcja nie zostanie przerwana.
Jeśli masz współbieżne wstawki, metody te należy udoskonalić za pomocą strategii blokowania.