为什么我的PostgreSQL查询中出现语法错误?

为什么我的PostgreSQL查询中出现语法错误?,postgresql,Postgresql,很抱歉,我对PostgreSQL很陌生。当我尝试运行适用于其他人的迁移时,我的计算机上会出现错误。我获取了迁移失败的脚本,并在pgAdmin3中运行它以查看发生了什么 我的问题是: DROP VIEW IF EXISTS vw_admin_question_export_text; CREATE VIEW vw_admin_question_export_text AS select name || '|' || q.question_key || '|' || qt.type_name ||

很抱歉,我对PostgreSQL很陌生。当我尝试运行适用于其他人的迁移时,我的计算机上会出现错误。我获取了迁移失败的脚本,并在pgAdmin3中运行它以查看发生了什么

我的问题是:

DROP VIEW IF EXISTS vw_admin_question_export_text;

CREATE VIEW vw_admin_question_export_text AS
select name || '|' || q.question_key || '|' || qt.type_name || '|' || qo.options import from question q 
full JOIN (SELECT question_id, COALESCE(string_agg(option_text || '|' || option_value, '|'),'') as options
FROM question_option
GROUP BY question_id) qo
on (q.question_id = qo.question_id)
JOIN question_type qt
on (q.questiontype_id = qt.questiontype_id);
这就是我得到的错误:

ERROR:  syntax error at or near "import"
LINE 4: ...n_key || '|' || qt.type_name || '|' || qo.options import fro...
                                                             ^

********** Error **********

ERROR: syntax error at or near "import"
SQL state: 42601
Character: 179
我的同事认为我的PostgreSQL版本9.5.2可能有问题,这里的问题是,如果不重复引用它或使用
作为关键字,就不能将它用作别名

更简单的测试:

postgres=# SELECT 'foo' import;
ERROR:  42601: syntax error at or near "import"
LINE 1: SELECT 'foo' import;
                     ^
LOCATION:  scanner_yyerror, scan.l:1082

postgres=# SELECT 'foo' AS import;
 import 
--------
 foo
(1 row)

postgres=# SELECT 'foo' "import";
 import 
--------
 foo
(1 row)
要解决您的问题,您可以简单地添加
AS
关键字来定义别名:

CREATE VIEW vw_admin_question_export_text AS
select
    name || '|' || q.question_key || '|' || qt.type_name || '|' || qo.options AS import
from question q 
full JOIN (
    SELECT
        question_id,
        COALESCE(string_agg(option_text || '|' || option_value, '|'),'') as options
    FROM question_option
    GROUP BY question_id
) qo
    on (q.question_id = qo.question_id)
JOIN question_type qt
    on (q.questiontype_id = qt.questiontype_id);

另一个选项是简单地选择另一个名称,这不会与保留关键字列表中的名称冲突(我建议使用该选项)。在任何情况下,始终使用
,因为
是一个好主意,可以使事情更加明确,避免类似这样的问题。

导入
在那里做什么?这个查询真的成功运行过吗?