Я получил это случайно:
db=> select name from site;
ERROR: column "name" does not exist
LINE 1: select name from site;
^
db=> select site.name from site;
name
---------------
(1,mysitename)
(1 row)
Второй запрос возвращает кортеж, содержащий целую строку. Использование postgres 9.0.1.
Редактировать: определение сайта по запросу. Мне не важно, эта причудливость работает для любого стола.
db=> \d site
Table "public.site"
Column | Type | Modifiers
--------+---------+---------------------------------------------------
id | integer | not null default nextval('site_id_seq'::regclass)
title | text | not null
site
.site
для начала нет «имени» . Почему вы запрашиваете столбец, который не существует?select site from site
- это поможет тебе понять ответ Гая более подробноОтветы:
NAME
на самом деле функция . Это особенность Postgres, что функция с одним аргументом, например,function(arg)
также может быть вызвана какarg.function
. Из документов:NAME
является внутренним типом для имен объектов , и эта функция приводит свой аргумент к этому типу и возвращает его.источник
row
тип приводится к типу,text
потому что это тип ввода функцииname
. Затемname
функция преобразует (не преобразует) входную строку в типname
(что также будет иметь побочный эффект сокращения до 64 байт)Также обратите внимание, что неявное приведение к имени было удалено в PostgreSQL 8.3, что означает, что это поведение больше не работает. Практически невозможно случайно получить такое поведение в PostgreSQL 8.3 и выше, потому что кортежи не преобразуются автоматически в текст.
Итак, в 9.1:
но чтобы получить такое поведение, мы должны:
Или мы могли бы определить нашу собственную функцию имени, принимающую тип comp_table_test и возвращающую все, что мы хотели.
источник
«имя» является зарезервированным ключевым словом . Таким образом, вы должны "процитировать" ключевое слово, чтобы использовать его:
Это решило некоторые из этих проблем для меня в прошлом, хотя код, который вы разместили, должен работать без кавычек. С другой стороны
слово, потому что вы явно используете схему для разрешения имени столбца
источник
select site.name from site
может быть неявно преобразовано в то,select name(site::text) from site
откуда происходит магия.