Postgres: Mã thoát không bằng 0 khi thực hiện tệp sql?


34

Tôi đang viết một tập lệnh shell để thực hiện các cuộc gọi đến psql bằng cách sử dụng 2 biểu mẫu ... một là bằng lệnh (-c), hai là bằng tệp (-f).

ví dụ: psql -c "tạo bảng foo (số nguyên thanh)"

ps -f foobar.sql

Một điểm khác biệt giữa các hình thức này là một lệnh gọi bằng lệnh (-c) trả về mã thoát không bằng 0 nếu gặp lỗi, trong khi cuộc gọi theo tệp (-f) dường như luôn trả về 0.

Tôi đang tự hỏi nếu có một cách giải quyết cho hành vi này? (tức là trả về giá trị khác không nếu xảy ra lỗi trong khi thực thi tệp).

Cảm ơn.

Câu trả lời:


37

Bạn có thể sử dụng tuyên bố dưới đây.

psql -v ON_ERROR_STOP=1 -f foobar.sql

Điều này sẽ trả về mã trả lại chính xác ngay cả foobar.sqltệp không bật ON_ERROR_STOPở đầu tệp.


21

Tôi tìm ra cách giải quyết điều này.

Tôi cần kích hoạt ON_ERROR_STOPở đầu tập tin.

Thí dụ:

\set ON_ERROR_STOP true

+1 để xem trang chủ :)
dị

+1 cho giải pháp tốt nhất vì nó cho phép tôi đặt biến trong tập lệnh, vì vậy tôi có thể tin tưởng rằng nó luôn chạy chính xác và không phải lo lắng về bối cảnh thời gian chạy.
Brandon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.