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ụngCAST
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.