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

Lời gọi hàm PostgreSQL

Điều đó được quyết định bởi các quy tắc của Độ phân giải loại hàm . Giải thích chi tiết trong sách hướng dẫn. Có liên quan:

  • Có cách nào để tắt tính năng quá tải trong Postgres không

NULL không có kiểu rõ ràng bắt đầu bằng kiểu "không xác định":

SELECT pg_typeof(NULL)

 pg_typeof
-----------
 unknown

Trên thực tế, Tôi đã nghi ngờ và chạy một bài kiểm tra nhanh, chỉ để tìm thấy các kết quả khác nhau trong Postgres 9.3 và 9.4. varchar được chọn qua integer (mà kỳ lạ mâu thuẫn với những phát hiện của bạn):

SQL Fiddle.

Tôi nghĩ rằng quy tắc theo quy tắc là điểm 4e trong danh sách (không có điểm nào trước đó quyết định trận đấu):

Tại mỗi vị trí, hãy chọn danh mục chuỗi nếu có ứng viên chấp nhận danh mục đó. (Sự thiên vị đối với chuỗi này là phù hợp vì ký tự kiểu không xác định trông giống như một chuỗi.)

Nếu bạn đã thêm một hàm khác với kiểu nhập text vào hỗn hợp quá tải, text sẽ được chọn qua varchar .

Cá nhân tôi hầu như luôn luôn sử dụng text thay vì varchar . Mặc dù tương thích với hệ nhị phân (gần như nhưng không hoàn toàn giống nhau), text gần với trung tâm của Postgres hơn về mọi mặt.

Tôi đã thêm điều đó vào fiddle, cũng như một ví dụ khác mà Postgres không thể quyết định và nổi cơn thịnh nộ.

Nếu bạn muốn chọn một hàm cụ thể, hãy thêm kiểu ép kiểu rõ ràng (đó là cách để thực hiện ở đây!):

select test(null::int)     AS func_int
     , test(null::varchar) AS func_vc;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu mặc định có tên là postgres trên máy chủ Postgresql

  2. Di chuyển từ Postgres sang SQL Server 2008

  3. Postgres - Chuyển đổi danh sách kề thành đối tượng JSON lồng nhau

  4. Kiểm tra Spring Data JPA không hoạt động đối với phương pháp cập nhật JpaRepository với chú thích @Modizing, tại sao?

  5. Nhận bản ghi trong đó khóa cột json là null