Стандартна документация на Postgres Pro 9
CREATE CAST създава нов актьорски състав. Актьорският състав определя как да се извърши преобразуване от един тип в друг. например,
преобразува целочислената константа 42 в float8 чрез извикване на предварително определена функция, в този случай float8 (int4). (Ако не е дефиниран подходящ актьорски състав, ще възникне грешка при преобразуване.)
Двата типа могат да бъдат двоично редуцируеми; това означава, че преобразуването може да се извърши "безплатно", без да се извиква някаква функция. Това изисква съответните стойности да имат еднакво вътрешно представяне. Например типовете text и varchar са двоично конвертируеми в двете посоки. Отношението на двоичната редуцируемост не е непременно симетрично. Например прехвърлянето на xml в текст е безплатно в текущата реализация, но преобразуването в обратна посока изисква функция, която извършва поне проверка на синтаксиса. (Два типа, които са двоично редуцируеми и в двете посоки, също се наричат двоично съвместими.)
Актьорският състав може да бъде дефиниран като I/O преобразуване с помощта на клаузата WITH INOUT. В този случай за преобразуване на един тип в друг се извиква функцията за извод на оригиналния тип данни и върнатият към него низ се предава на функцията за въвеждане на целевия тип. В много случаи тази функция елиминира необходимостта от записване на отделни функции за гласове за конвертиране на всички типове. I/O преобразуването работи по същия начин като нормалната функция на гласове; само изпълнението се различава.
По подразбиране актьорският състав може да бъде извикан само чрез изричното му писане, тоест чрез използване на CAST (x AS type_name) или x: type_name .
Ако гласовете са маркирани като ASSIGNMENT, той може да се извика имплицитно чрез присвояване на стойност на колона с целевия тип данни. Например, ако foo.f1 е колона с текстов тип, тогава командата:
ще бъде валидно, ако гласовото цяло число към текста е маркирано като ASSIGNMENT и няма да бъде по друг начин. (Обикновено използваме термина присвояване на гласове, за да опишем този тип гласове.)
Ако гласовете са маркирани като ИМПЛИЦИТ, той ще бъде извикан имплицитно във всеки контекст, било то присвояване или вътрешно преобразуване в израз. (Обикновено наричаме този тип гласове имплицитно гласове.) Например, помислете за тази заявка:
Когато се анализира заявка, на константите първо се присвояват целочислените и числовите типове. Системните каталози обаче нямат оператор цяло число + число, въпреки че има числов + цифров оператор. По този начин заявката ще успее, ако има AS IMPLICIT маркирано цяло число-числово преобразуване - и наистина е така. Анализаторът на заявки ще приложи неявно кастинг и заявката ще бъде обработена така, сякаш е написана във формуляра
Системните каталози също съдържат прехвърляне на числово към цяло число. Ако този глас също беше маркиран като ИМПЛИЦИТЕН (всъщност не е), анализаторът на заявката щеше да трябва да избере между предишната опция и да хвърли числовата константа към целочисления тип и след това да приложи оператора integer + integer. Неспособен да избере най-добрия вариант, анализаторът няма да може да разреши заявката и ще я обяви за двусмислена. Именно поради факта, че само едно от двете отливки се прави имплицитно, анализаторът разбира, че предпочитаното преобразуване на израза числово-и цяло число в числово; няма отделни вградени знания за това.
Забележка
За да създадете актьорски състав, трябва да притежавате единия (източник или цел) тип и да имате привилегия USAGE за другия. Само суперпотребителите могат да създадат BCD актьорски състав. (Това ограничение е въведено, тъй като преобразуването на данни с грешни двоични преобразувания може лесно да доведе до срив на сървъра.)