Istnieją trzy rodzaje odlewów. Zarejestrowanym rzutem źródła i typem docelowym musi być "przypisanie" (a
) lub "niejawny" (i
) do pracy w VALUES
wyrażenie INSERT
oświadczenie. Patrząc na katalog systemowy pg_cast
, rzut z boolean
na integer
jest zdefiniowany tylko jako "jasny" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Wynik:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
Powiązane:
Będziesz musiał zmienić castcontext
aby to działało – co możesz zrobić jako superużytkownik. Nie ma instrukcji "ALTER CAST" dla tego egzotycznego manewru, musisz UPDATE
bezpośrednio. Na przykład:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
Jednak , istnieją dobre powody dla predefiniowanego kontekstu rzutowania każdego rzutowania. Manipulowanie katalogami systemowymi nie jest czymś, co należy robić lekko. W tym konkretnym przypadku może to zachwiać równowagą podejmowania decyzji, gdy Postgres musi wybrać pasującą obsadę. Jak przy wybieraniu z zestawu przeładowanych funkcji...
Podobna procedura dla integer -> boolean
, int2 -> boolean
, boolean -> int2
itp.