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

LỖI PostgreSQL:hàm to_tsvector (ký tự thay đổi, không xác định) không tồn tại

Sử dụng kiểu truyền rõ ràng:

SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;

Hoặc thay đổi cột languages.language để nhập regconfig . Xem câu trả lời của @ Swav.

Tại sao?

Postgres cho phép quá tải chức năng. Chữ ký hàm được xác định bởi chúng (tùy chọn giản đồ -đủ tiêu chuẩn) tên cộng (danh sách) loại tham số đầu vào (S). Dạng 2 tham số của to_tsvector() mong đợi loại regconfig như tham số đầu tiên:

SELECT proname, pg_get_function_arguments(oid)
FROM   pg_catalog.pg_proc
WHERE  proname = 'to_tsvector'

   proname   | pg_get_function_arguments
-------------+---------------------------
 to_tsvector | text
 to_tsvector | regconfig, text             -- you are here

Nếu không có chức năng hiện có nào phù hợp với chính xác , các quy tắc của Độ phân giải loại chức năng quyết định kết quả phù hợp nhất - nếu có. Điều này thành công cho to_tsvector('english', 'hello world') , với 'english' là một ký tự chuỗi không định kiểu . Nhưng không thành công với tham số đã nhập varchar , bởi vì không có ngầm định đã đăng ký truyền từ varchar thành regconfig . Hướng dẫn sử dụng:

Loại bỏ các hàm ứng cử viên mà các loại đầu vào không phù hợp và không thể chuyển đổi (sử dụng hàm ẩn chuyển đổi) để phù hợp. bảng chữ không xác định được cho là có thể chuyển đổi thành bất kỳ thứ gì cho mục đích này.

Tôi nhấn mạnh đậm.
Các phôi đã đăng ký cho regconfig :

SELECT castsource::regtype, casttarget::regtype, castcontext
FROM   pg_catalog.pg_cast
WHERE  casttarget = 'regconfig'::regtype;

 castsource | casttarget | castcontext
------------+------------+-------------
 oid        | regconfig  | i
 bigint     | regconfig  | i
 smallint   | regconfig  | i
 integer    | regconfig  | i

Giải thích cho castcontext :

castcontext char
Cho biết bối cảnh mà dàn diễn viên có thể được gọi trong. e chỉ có nghĩa là một diễn viên rõ ràng (sử dụng CAST hoặc :: cú pháp). a có nghĩa là chỉ định một cách ngầm định cho một cột đích, cũng như một cách hoàn toàn vô tính. i có nghĩa ẩn trong các biểu thức, cũng như các trường hợp khác.

Đọc thêm về ba loại nhiệm vụ khác nhau trong chương TẠO CAST.



  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ách chuyển đổi cơ sở dữ liệu bằng PostgreSQL

  2. Tham gia truy vấn chỉ với các cột có tất cả các giá trị trong mệnh đề `in`

  3. Postgres có hỗ trợ các giao dịch lồng ghép hoặc tự trị không?

  4. Ánh xạ cột PostgreSQL JSON thành thuộc tính thực thể Hibernate

  5. Trả về bảng động với các cột không xác định từ hàm PL / pgSQL