AFAIK не е пакетиране от страна на сървъра в fe/be протокол
, така че PgJDBC не може да го използва. . Актуализиране :Е, грешах. PgJDBC (точно към 9.3) прави изпращайте партиди от заявки към сървъра ако няма нужда да извлича генерирани ключове . Той просто подрежда куп заявки в буфера за изпращане, без да се синхронизира със сървъра след всяка отделна заявка.
Вижте:
- Проблем #15:Разрешаване на групиране при връщане на генерирани ключове
- Проблем #195:PgJDBC не изпраща пакети, които връщат генерирани ключове
Дори когато се изискват генерирани ключове, разширената заявка протокол се използва, за да се гарантира, че не е необходимо текстът на заявката да се изпраща всеки път, а само параметрите.
Честно казано, JDBC пакетирането не е чудесно решение във всеки случай. Лесен е за използване от програмиста на приложението, но е доста неоптимален за производителност, тъй като сървърът все още трябва да изпълнява всеки оператор поотделно - макар и не парсиране и план ги поотделно, стига да използвате подготвени отчети.
Ако autocommit е включен, производителността ще бъде абсолютно жалка, защото всеки израз задейства ангажимент. Дори и при изключен автоматичен ангажимент, много малки изрази няма да бъдат особено бързи, дори ако можете да елиминирате двупосочните закъснения.
По-добро решение за много прости UPDATE
s може да бъде към:
COPY
нови данни въвTEMPORARY
илиUNLOGGED
маса; и- Използвайте
UPDATE ... FROM
доUPDATE
сJOIN
срещу копираната таблица
За КОПИРАНЕ вижте документите на PgJDBC
и COPY
документация в сървърните документи
.
Често ще откриете, че е възможно да промените нещата, така че приложението ви да не трябва да изпраща всички тези отделни UPDATE
изобщо.