"Değişir".
İstemci ağ bağlantısı kaybından dolayı kaybolursa, sorgu genellikle ağ gönderme arabelleğini dolduracak kadar satır alınana kadar çalışır, ardından durur ve TCP bağlantısı kesilene kadar takılı kalır. O tamamlanırsa önce başarıyla tamamlarsınız tampon, TCP gönderme doldurur böylece 's autocommit eğer sorgu taahhüt edecektir.
İstemci, istemcinin işletim sisteminin sunucuya bir TCP RST (istemci segfault / crash, SIGTERM, SIGKILL, vb.) Yoluyla rapor verebileceği şekilde öldürülürse, PostgreSQL sunucusu kesme bayrağını ayarlayacaktır. Bir dahaki sefere sorgu yürütülürken kesinti olup olmadığını kontrol ederse, bayrağı görür ve iptal eder. Bazen bir sorgu, bazı uzantıları ve PostgreSQL çekirdeği içindeki birkaç yeri - kodları kesintileri kontrol etmeyen CPU içinde ağır işler yapıyor olabilir, bu durumda kesmeyi uzun süre fark etmeyebilir ve çalışmaya devam edebilir. Yine de, otomatik taahhüt varsa tamamlamadan ve taahhütte bulunmadan önce her zaman kesmeyi ve iptal etmeyi görür.
İstemci ani bir OS yeniden başlatılması gibi bir şey tarafından öldürülürse, istemci ana bilgisayar aniden TCP bağlantısı hakkında hiçbir şey bilmez, ancak yine de ağda yanıt verebilirse, sorgu bir satır yazmayı ilk kez test etmeyi denediğinde muhtemelen iptal edilir. Jeff, istemcinin ana bilgisayarı, yeniden başlatma sonrasında sunucu tarafından gönderilen ilk pakete yanıt olarak bir TCP RST göndereceğinden dedi. PostgreSQL, gönderdiği her satırdaki kesintileri kontrol eder.
Bu davranış yapılandırılamaz. PostgreSQL söz konusu olduğunda, eğer müşteri ortadan kalkarsa işi müşterinin çalıştırdığı sorguları sonlandırmaktır. Sorgu başlangıcında alabileceğiniz bir tür sorgu tamamlama belirtecine ihtiyacınız olacağını değiştirmek için, daha sonra sunucuyu başka bir bağlantı üzerinden sorgu hakkında sormak için kullanın. Temel olarak, eşzamansız / arka plan sorguları uygulamanız gerekir. Muhtemelen güzel bir özellik, ancak şu anda desteklenmiyor.
Sorgu otomatik tamamlanıyorsa veya sorgunuz COMMIT
istemciyi öldürdüğünüzde / bağlantıyı kaybettiğiniz sırada uçuştaysa, bir işlemin istemcinin veya taahhüt etmedi. İşlemin veriler üzerindeki etkilerini aramaktan başka gerçek bir yol yoktur.
Bu kabul edilemez olduğunda, iki aşamalı kesinleştirme ve bir müşteri tarafı işlem yöneticisi kullanabilirsiniz.