Có ba loại diễn viên. Truyền đã đăng ký cho nguồn của bạn một loại đích phải là "gán" (a
) hoặc "ngầm định" (i
) để làm việc trong VALUES
biểu thức của một INSERT
bản tường trình. Xem danh mục hệ thống pg_cast
, diễn viên từ boolean
thành integer
chỉ được định nghĩa "rõ ràng" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Kết quả:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
Có liên quan:
Bạn sẽ phải thay đổi castcontext
để làm cho nó hoạt động - mà bạn có thể làm siêu người dùng. Không có câu lệnh "ALTER CAST" cho thao tác kỳ lạ này, bạn phải UPDATE
trực tiếp. Như:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Tuy nhiên , có những lý do chính đáng cho bối cảnh diễn viên được xác định trước của mỗi dàn diễn viên. Giả mạo danh mục hệ thống không phải là điều bạn nên làm nhẹ. Trong trường hợp cụ thể này, nó có thể làm mất cân bằng việc đưa ra quyết định khi Postgres phải chọn một dàn diễn viên phù hợp. Giống như để chọn từ một tập hợp các hàm quá tải ...
Quy trình tương tự cho integer -> boolean
, int2 -> boolean
, boolean -> int2
, v.v.