Vấn đề với một nỗ lực đơn giản là bạn có một nhóm gọi diễn viên, gọi nhóm diễn viên, gọi nhóm diễn viên ...
Bạn cần bằng cách nào đó để thoát khỏi varchar-> enum trong dàn diễn viên của mình. Cách đơn giản nhất (dễ hiểu nhất) là chỉ cần chuyển đổi thủ công. Lưu ý rằng các ký tự chuỗi đang được truyền trong câu lệnh trường hợp không phải là văn bản mà chúng được trích dẫn-không xác định-loại bỏ qua đệ quy vô hạn.
BEGIN;
CREATE TYPE t_tl AS ENUM ('red', 'amber', 'green');
CREATE FUNCTION dummy_cast(varchar) RETURNS t_tl AS $$
SELECT CASE $1
WHEN 'red' THEN 'red'::t_tl
WHEN 'amber' THEN 'amber'::t_tl
WHEN 'green' THEN 'green'::t_tl
END;
$$ LANGUAGE SQL;
CREATE CAST (varchar AS t_tl) WITH FUNCTION dummy_cast(varchar) AS ASSIGNMENT;
CREATE TABLE t (x t_tl);
INSERT INTO t VALUES ('red');
INSERT INTO t VALUES ('green'::varchar);
SELECT * FROM t;
ROLLBACK;