我偶然得到了这个:
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
NAME
实际上是一个函数。Postgres 的一个怪癖是带有一个参数的函数例如function(arg)
也可以调用为arg.function
. 从文档:NAME
是对象名称的内部类型,并且此函数将其参数转换为该类型并返回它。另请注意,在 PostgreSQL 8.3 中删除了对 name 的隐式强制转换,这意味着此行为不再有效。在 PostgreSQL 8.3 及更高版本中意外出现这种行为几乎是不可能的,因为元组不会自动转换为文本。
所以在 9.1 中:
但要获得这种行为,我们必须:
或者我们可以定义我们自己的名称函数,接收类型 comp_table_test 并返回我们想要的任何内容。
“名称”是保留关键字。所以你应该“引用”关键字来使用它:
这在过去为我解决了其中的一些问题,尽管您发布的代码也应该在不引用的情况下工作。另一方面
word,因为您明确使用架构来解析列的名称