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.

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.


21

Saya menemukan cara mengatasi ini.

Saya perlu mengaktifkan ON_ERROR_STOPdi bagian atas file.

Contoh:

\set ON_ERROR_STOP true

+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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.