Postgres: ไม่ใช่รหัสการออกจากศูนย์เมื่อเรียกใช้งานไฟล์ sql?


34

ฉันกำลังเขียนเชลล์สคริปต์ซึ่งทำให้การเรียก psql โดยใช้ 2 รูปแบบ ... หนึ่งคือโดยคำสั่ง (-c), อื่น ๆ คือโดยไฟล์ (-f)

เช่น psql -c "create table foo (จำนวนเต็มแท่ง)"

psql -f foobar.sql

ความแตกต่างอย่างหนึ่งระหว่างแบบฟอร์มเหล่านี้คือการเรียกใช้คำสั่ง (-c) ส่งคืนโค้ดออกที่ไม่ใช่ศูนย์หากพบข้อผิดพลาดขณะที่การเรียกใช้ไฟล์ (-f) ดูเหมือนจะส่งกลับศูนย์เสมอ

ฉันสงสัยว่ามีวิธีแก้ปัญหาสำหรับพฤติกรรมนี้หรือไม่? (เช่นส่งคืนไม่ใช่ศูนย์หากเกิดข้อผิดพลาดขณะดำเนินการไฟล์)

ขอบคุณ

คำตอบ:


37

คุณสามารถใช้คำสั่งด้านล่าง

psql -v ON_ERROR_STOP=1 -f foobar.sql

นี่จะส่งคืนรหัสส่งคืนที่ถูกต้องแม้foobar.sqlไฟล์จะไม่เปิดใช้งานON_ERROR_STOPที่ด้านบนของไฟล์


21

ฉันพบวิธีแก้ปัญหานี้

ฉันต้องเปิดใช้งานON_ERROR_STOPที่ด้านบนของไฟล์

ตัวอย่าง:

\set ON_ERROR_STOP true

+1 สำหรับการดู manpage :)
serverhorror

+1 สำหรับทางออกที่ดีที่สุดเพราะช่วยให้ฉันสามารถตั้งค่าตัวแปรในสคริปต์ดังนั้นฉันสามารถเชื่อถือได้ว่ามันทำงานได้อย่างถูกต้องเสมอและไม่ต้องกังวลเกี่ยวกับบริบทของรันไทม์
Brandon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.