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.