pushLog
функцията записва всяко вмъкване поотделно и записването е бавно.
Както е обяснено в документацията Попълване на база данни :
Също така:
Във вашия случай обаче това би било по-скоро проблем, отколкото полза, тъй като всяко INSERT може да се провали при нарушение на първичния ключ, като по този начин анулира предишните INSERT след последното записване. Имайте предвид, че това също би било проблем с COPYкод> , трябва ли да го използвате.
Тъй като наистина е необходимо да групирате заявките в транзакции за ефективност, трябва да се справите с нарушенията на първичния ключ по начин, който не прекъсва транзакцията.
Обикновено се използват два метода:
-
Избягвайте грешката:
INSERT IN... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)
-
Захванете грешката, като вмъкнете вътре във функция plpgsql, която има блок EXCEPTION, игнориращ itr. Конкретните INSERT(и), които причиняват дублиране, ще бъдат анулирани, но транзакцията няма да бъде прекратена.
Ако имате едновременни вмъквания, тези методи трябва да бъдат прецизирани със стратегия за заключване.