Báo cáo chuẩn bị
Giải thích cho điều này có thể được tìm thấy trong chương Hằng số các loại khác của sách hướng dẫn :
Nhấn mạnh đậm của tôi.
Các tham số cho các câu lệnh đã chuẩn bị thực sự không phải là chữ ký hiệu của sting nhưng đã nhập giá trị , vì vậy bạn không thể sử dụng biểu mẫu type 'string'
. Sử dụng một trong hai biểu mẫu còn lại để chuyển giá trị sang một kiểu khác, giống như bạn đã tìm thấy chính mình.
Ví dụ:
PREPARE foo AS SELECT $1::date;
EXECUTE foo('2005-1-1');
Tương tự cho PQexecParams
trong thư viện libpq C
Tài liệu:
lựa chọn thay thế , như đã đề cập trong phần trích dẫn ở trên, là chuyển các OID của các kiểu dữ liệu tương ứng với paramTypes[]
- nếu bạn thực sự cần diễn viên. Trong hầu hết các trường hợp, việc cho phép Postgres lấy các kiểu dữ liệu từ ngữ cảnh truy vấn sẽ hoạt động tốt.
Bạn có thể lấy OID của các loại dữ liệu từ danh mục hệ thống pg_type
:
SELECT oid FROM pg_type WHERE typname = 'date';
Bạn phải sử dụng đúng tên loại nội bộ. Ví dụ:int4
cho integer
.
Hoặc với cách truyền thuận tiện đến regtype
:
SELECT 'date'::regtype::oid;
Điều này linh hoạt hơn vì các bí danh đã biết cho tên loại cũng được chấp nhận. Ví dụ:int4
, int
hoặc integer
cho integer
.