今天早上我遇到了一个奇怪的问题。我正在创建一个简化Postgres表中应用程序列表的视图。
这失败了。
CREATE OR REPLACE VIEW application_view AS
SELECT COALESCE( nullif(full_name,''), nullif(additional_info,''), app_name) name
, id
FROM application
ORDER BY COALESCE( nullif(full_name,''), nullif(additional_info,''), app_name)
而
CREATE OR REPLACE VIEW application_view AS
SELECT COALESCE( nullif(full_name,''), nullif(additional_info,''), app_name) application
, id
FROM application
ORDER BY COALESCE( nullif(full_name,''), nullif(additional_info,''), app_name)
的工作。
我经常在表中使用name作为列名,所以有关第一个sql语句失败的原因的任何想法吗?
答案 0 :(得分:4)
这是一个keyword。如果要在选择列表中使用关键字作为别名,则必须使用单词as
:
select 1 name;
ERROR: syntax error at or near "name"
LINE 1: select 1 name;
select 1 as name;
name
------
1
(1 row)
从the documentation关于选择列表中的别名:
要指定用于输出列的名称,请在列的表达式后面写入AS output_name 。 (您可以省略AS,但仅当所需的输出名称与任何PostgreSQL关键字都不匹配时(请参阅附录C)。为了防止将来可能添加关键字,建议您始终写入AS或双引号输出名称。 )