Bir sql betiğini çalıştırırken betikteki ilk hatayla karşılaştığında durduğunu, genellikle önceki hatalardan bağımsız olarak devam ettiğini belirtmenin bir yolu var mı?
Yanıtlar:
.Psqlrc'ye aşağıdakileri eklemek için çözümün mükemmellikten uzak olduğunu düşünüyorum
\set ON_ERROR_STOP on
çok daha basit ve kullanışlı bir yol var - psql parametresini kullanın:
psql -v ON_ERROR_STOP=1
-X.psqlrc dosya kullanımını kapatma parametresini kullanmak daha iyidir . Benim için mükemmel çalışıyor
Peter Eisentraut'un harika gönderisinde bulunan çözümü ps. Teşekkür ederim, Peter! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
Kullandığınızı varsayıyorum psql, ~/.psqlrcdosyanıza eklemek kullanışlı olabilir .
\set ON_ERROR_STOP on
Bu, ilk hatada iptal edilmesini sağlayacaktır. Eğer buna sahip değilseniz, bir işlemle bile, komut dosyanızı çalıştırmaya devam edecek, ancak betiğinizin sonuna kadar her şeyde başarısız olacaktır.
Ve muhtemelen Paul'ün dediği gibi bir işlem kullanmak istersiniz. psql --single-transaction ...Senaryoyu değiştirmek istemiyorsanız, bu da yapılabilir .
Öyleyse, .psqlrc dosyanızda ON_ERROR_STOP ile eksiksiz bir örnek:
psql --single-transaction --file /your/script.sql
--single-transactionkullanılsa bile , -v ON_ERROR_STOP=1sıfır olmayan bir varoluş durumu için hala gereklidir
Tam olarak istediğiniz şey bu değil, ancak betiğinize ile başlar begin transaction;ve end transaction;onunla bitirirseniz, aslında ilk hatadan sonra her şeyi atlar ve sonra hatadan önce yaptığı her şeyi geri alır.
Her zaman doğrudan kılavuza başvurmayı seviyorum.
Gönderen PostgreSQL Manuel :
Çıkış Durumu
psql, normal şekilde bittiğinde kabuğa 0 döndürür, kendiliğinden ölümcül bir hata oluşursa 1 (örn. bellek yetersiz, dosya bulunamadı), sunucu bağlantısı kötüyse ve oturum etkileşimli değilse 2 ve eğer komut dosyasında bir hata oluştu ve ON_ERROR_STOP değişkeni ayarlandı.
Varsayılan olarak, PostgreSQL sunucu hatası psql üzerinde çalıştırdığınız sql kodu bir hatadan çıkmaz. Hatayı yakalayacak ve devam edecektir. Yukarıda bahsedildiği gibi ON_ERROR_STOPayarı on olarak ayarlarsanız, psql sql kodunda bir hata yakaladığında çıkacak ve 3kabuğa dönecektir .
-v ON_ERROR_STOP=ONen az 9.2 ile de çalışır. Boolean "true" nun herhangi bir varyantına izin verildiğinden şüpheleniyorum .