Има три вида отливки. Регистрираният актьорски състав за вашия източник и целеви тип трябва да бъде "присвояване" (a
) или "имплицитно" (i
) за работа в VALUES
израз на INSERT
изявление. Разглеждане на системен каталог pg_cast
, предаването от boolean
към integer
се дефинира само "явно" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Резултат:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
Свързани:
Ще трябва да промените castcontext
за да работи - което можете направете като суперпотребител. Няма оператор „ALTER CAST“ за тази екзотична маневра, ще трябва да UPDATE
директно. Като:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Въпреки това , има основателни причини за предварително дефинирания контекст на предаване на всяко предаване. Подправянето на системните каталози не е нещо, което трябва да правите с лека ръка. В този конкретен случай това може да дисбалансира вземането на решения, когато Postgres трябва да избере подходящ каст. Например за избор от набор от претоварени функции ...
Подобна процедура за integer -> boolean
, int2 -> boolean
, boolean -> int2
и т.н.