Nhận SQLSTATE trong các thông báo lỗi psql


8

Tôi có vấn đề sau đây.

SELECT * FROM tgvbn();
ERROR:  function tgvbn() does not exist
LINE 1: SELECT * FROM tgvbn();
                      ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Do Phụ lục A của tài liệu chính thức chỉ nêu error_codes và tên có điều kiện chứ không phải thông báo thực tế, nên người ta chỉ có thể đoán rằng "Không có chức năng nào khớp ..." đề cập đến 42883 / undefined_function. Tôi có thể thiết lập log_error_verbosity = verbosetrong postgresql.conf- nhưng điều đó sẽ ảnh hưởng đến các bản ghi, không phải là thông điệp trở về khách hàng:

Kiểm soát lượng chi tiết được ghi trong nhật ký máy chủ cho mỗi thông báo được ghi lại.

Chà, tôi có thể tham khảo nhật ký cho mẩu thông tin này, nhưng có cách nào để đưa nó vào thông báo lỗi không?


Đây là một vấn đề psql hơn là một vấn đề "cấu hình máy chủ". Máy khách SQL của tôi hiển thị SQLSTATE trong trường hợp như vậy.
a_horse_with_no_name

@a_horse_with_no_name Cảm ơn, nhận xét của bạn hướng tôi đến giải pháp.
dezso

Câu trả lời:


8

Dựa trên nhận xét của a_horse_with_no_name, tôi bắt đầu tìm kiếm xung quanh psqlvà tìm ra giải pháp:

\set VERBOSITY verbose
SELECT * FROM tgvbn();

ERROR:  42883: function vfjkb() does not exist
...

Bây giờ đi vào .psqlrc. Thông tin chi tiết và các tùy chọn khác có thể được tìm thấy trong tài liệu psql .


Tôi đã nhanh chóng quét qua hướng dẫn sau khi đăng bình luận của mình, nhưng tôi không thấy cái đó;) Cảm ơn đã cập nhật.
a_horse_with_no_name

1

Có vẻ như từ phiên bản 9.2 có chức năng này:

DECLARE
  text_var1 text;
  text_var2 text;
BEGIN
  -- some processing which might cause an exception
  ...
EXCEPTION WHEN OTHERS THEN
  GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE,
                          text_var2 = PG_EXCEPTION_DETAIL;
END;
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.