Postgres 中具有相同别名的两列

Two columns with the same alias in Postgres

为什么允许查询

SELECT 
  'foo' "baz",
  'bar' "baz"

在 Postgres 中(在 9.6 上测试)?这在哪些情况下有意义?乍一看,这似乎是一个很大的错误来源。

这是用户对数据呈现方式的责任。有两种典型情况是新手应该注意的。第一个涉及 anonymous 列,例如:

select 'alfa', 'beta'

 ?column? | ?column? 
----------+----------
 alfa     | beta

第二个涉及连接具有相同列名的表,例如

select *
from company c
join employee e on company_id = c.id

 id |  name   | id | name  | company_id 
----+---------+----+-------+------------
  1 | Company |  1 | Smith |          1

在这两种情况下,都应该使用别名来使列名明确且提供更多信息。我总是在其他人可以阅读的查询中这样做。但是,当我临时查询数据库时,我有时会庆幸 Postgres 没有太多限制,我不必写下几个列名而不是星号。

最重要的是,Postgres 会检查列名是否在真正相关的情况下是唯一的,并且绝不允许违反数据完整性,例如:

create view my_view as 
select 'foo' as "baz", 'bar' as "baz"

ERROR:  column "baz" specified more than once