Postgres: Bukan kode keluar nol saat mengeksekusi file sql?

34

Saya menulis skrip shell yang membuat panggilan ke psql menggunakan 2 formulir ... satu adalah dengan perintah (-c), yang lain adalah dengan file (-f).

mis. psql -c "create table foo (bar integer)"

psql -f foobar.sql

Satu perbedaan antara bentuk-bentuk ini adalah bahwa panggilan dengan perintah (-c) mengembalikan kode keluar non-nol jika kesalahan terjadi, sementara panggilan dengan file (-f) tampaknya selalu mengembalikan nol.

Saya ingin tahu apakah ada solusi untuk perilaku ini? (Yaitu mengembalikan non-nol jika kesalahan terjadi saat mengeksekusi file).

Terima kasih.

Jin Kim
sumber

Jawaban:

37

Anda dapat menggunakan pernyataan di bawah ini.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Ini akan mengembalikan kode pengembalian yang benar bahkan foobar.sqlfile tidak diaktifkan ON_ERROR_STOPdi bagian atas file.

Taye
sumber
21

Saya menemukan cara mengatasi ini.

Saya perlu mengaktifkan ON_ERROR_STOPdi bagian atas file.

Contoh:

\set ON_ERROR_STOP true
Jin Kim
sumber
+1 untuk melihat halaman manual :)
serverhorror
1 untuk solusi terbaik karena memungkinkan saya untuk mengatur variabel dalam skrip, jadi saya bisa percaya itu selalu berjalan dengan benar dan tidak perlu khawatir tentang konteks runtime.
Brandon