pushLog
funkce odevzdá každý insert samostatně a odevzdání je pomalé.
Jak je vysvětleno v dokumentaci Vyplňování databáze :
Také:
Ve vašem případě by to však byl spíše problém než výhoda, protože každý INSERT může selhat při porušení primárního klíče, čímž se zruší předchozí INSERT od posledního odevzdání. Upozorňujeme, že by to byl také problém s COPY , měli byste to použít.
Vzhledem k tomu, že je skutečně nutné seskupovat dotazy v transakcích kvůli výkonu, musíte porušení primárního klíče řešit způsobem, který transakci nezruší.
Obvykle se používají dvě metody:
-
Vyhněte se chybě:
INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)
-
Zachyťte chybu vložením do funkce plpgsql, která má blok EXCEPTION ignorující itr. Konkrétní INSERT(y) způsobující duplikát budou zrušeny, ale transakce nebude přerušena.
Pokud máte souběžné vložky, je třeba tyto metody upřesnit pomocí strategie zamykání.