PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Lỗi cú pháp PostgreSQL trong truy vấn được tham số hóa vào ngày $ 1

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không tìm thấy Kết nối Oracle khi kết nối PostGIS được xác định

  2. PostgreSQL nơi tất cả trong mảng

  3. Thử nghiệm dưa chuột và RSpec với zeus:Postgres đang được người dùng khác truy cập

  4. Hibernate:giá trị khóa trùng lặp vi phạm ràng buộc duy nhất

  5. Xóa bằng CTE chậm hơn so với sử dụng bảng tạm trong Postgres