AFAIK non è un batch lato server in fe/be protocollo
, quindi PgJDBC non può usarlo. . Aggiorna :Beh, mi sbagliavo. PgJDBC (preciso a partire dalla 9.3) fa invia batch di query al server se non è necessario recuperare le chiavi generate . Mette semplicemente in coda un sacco di query nel buffer di invio senza sincronizzarsi con il server dopo ogni singola query.
Vedi:
- Problema n. 15:abilitare il batching quando si restituiscono le chiavi generate
- Edizione n. 195:PgJDBC non esegue la pipeline di batch che restituiscono chiavi generate
Anche quando vengono richieste chiavi generate, la query estesa protocollo viene utilizzato per garantire che il testo della query non debba essere inviato ogni volta, ma solo i parametri.
Francamente, il batching JDBC non è comunque un'ottima soluzione. È facile da usare per lo sviluppatore dell'app, ma piuttosto non ottimale per le prestazioni poiché il server deve comunque eseguire ogni istruzione singolarmente, anche se non analisi e pianifica singolarmente, purché utilizzi dichiarazioni preparate.
Se l'autocommit è attivo, le prestazioni saranno assolutamente patetiche perché ogni istruzione attiva un commit. Anche con l'autocommit off, l'esecuzione di molte piccole istruzioni non sarà particolarmente veloce anche se potresti eliminare i ritardi di andata e ritorno.
Una soluzione migliore per molti semplici UPDATE
s può essere a:
COPY
nuovi dati in unTEMPORARY
oUNLOGGED
tavolo; e- Usa
UPDATE ... FROM
aUPDATE
con unJOIN
contro la tabella copiata
Per COPIA, vedere i documenti PgJDBC
e il COPY
documentazione nei documenti del server
.
Scoprirai spesso che è possibile modificare le cose in modo che la tua app non debba inviare tutti quei singoli UPDATE
è proprio così.