Приведение противоречий в двойные кавычки - PullRequest
3 голосов
/ 25 февраля 2020

Использование postgres 12.2:

select '46ee2794-ddd1-4c4b-be04-82908ff1885d'::"uuid" /*works, uuid is a built-in type, not an alias*/
select '1'::"int4"    /*works ... int4 is alias for integer*/
select '1'::"integer" /*fails ... integer is built-in type*/

С тех пор я отказался от двойных кавычек, но мне все еще любопытно, почему это ведет себя так, как оно!

1 Ответ

2 голосов
/ 25 февраля 2020

Это может показаться странным, но на самом деле int4 является базовым типом, а integer является разновидностью псевдонима, если предположить, что базовые типы хранятся в системном каталоге pg_type.

select oid, typname
from pg_type
where typname like 'int%'
and typcategory = 'N'

 oid | typname
-----+---------
  20 | int8
  21 | int2
  23 | int4
(3 rows)
...