Apakah ada cara untuk menentukan bahwa saat menjalankan skrip sql berhenti saat menghadapi kesalahan pertama pada skrip, biasanya terus berlanjut, terlepas dari kesalahan sebelumnya.
Jawaban:
Saya pikir solusi untuk menambahkan berikut ke .psqlrc masih jauh dari kesempurnaan
\set ON_ERROR_STOP on
ada cara yang jauh lebih sederhana dan nyaman - gunakan psql dengan parameter:
psql -v ON_ERROR_STOP=1
lebih baik gunakan juga -Xparameter mematikan penggunaan file .psqlrc. Bekerja dengan sempurna untuk saya
ps solusinya ditemukan di posting bagus dari Peter Eisentraut. Terima kasih, Peter! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
Saya berasumsi Anda sedang menggunakan psql, ini mungkin berguna untuk ditambahkan ke ~/.psqlrcfile Anda .
\set ON_ERROR_STOP on
Ini akan membatalkannya pada kesalahan pertama. Jika Anda tidak memilikinya, bahkan dengan transaksi itu akan terus mengeksekusi skrip Anda tetapi gagal pada semuanya sampai akhir skrip Anda.
Dan Anda mungkin ingin menggunakan transaksi seperti yang dikatakan Paul. Yang juga bisa dilakukan psql --single-transaction ...jika Anda tidak ingin mengubah skrip.
Jadi contoh lengkap, dengan ON_ERROR_STOP di .psqlrc Anda:
psql --single-transaction --file /your/script.sql
--single-transactiondigunakan, -v ON_ERROR_STOP=1masih diperlukan untuk status tidak nol yang ada
Ini tidak persis seperti yang Anda inginkan, tetapi jika Anda memulai skrip dengan begin transaction;dan diakhiri dengan end transaction;, itu benar-benar akan melewatkan semuanya setelah kesalahan pertama, dan kemudian akan mengembalikan semua yang dilakukannya sebelum kesalahan.
Saya selalu suka merujuk manual secara langsung.
Dari Manual PostgreSQL :
Status Keluar
psql mengembalikan 0 ke shell jika selesai secara normal, 1 jika terjadi kesalahan fatal sendiri (mis. kehabisan memori, file tidak ditemukan), 2 jika koneksi ke server rusak dan sesi tidak interaktif, dan 3 jika kesalahan terjadi dalam skrip dan variabel ON_ERROR_STOP ditetapkan.
Secara default jika kode sql yang Anda jalankan di server PostgreSQL error psql tidak akan menghentikan kesalahan. Ini akan menangkap kesalahan dan melanjutkan. Jika, seperti yang disebutkan di atas, Anda menyetel ON_ERROR_STOPpengaturan ke aktif, ketika psql menemukan kesalahan dalam kode sql, ia akan keluar dan kembali 3ke shell.
-v ON_ERROR_STOP=ONjuga bekerja, setidaknya dengan 9.2. Saya menduga salah satu varian boolean "benar" diizinkan.