2016-05-12 50 views
-1

私は謝罪します。私はPostgreSQLについて非常に新しいです。他の人のために動作する移行を試してみると、コンピュータにエラーが発生します。私は移行から失敗したスクリプトを取り出し、pgAdmin3で実行して、何が起こっていたのかを確認しました。ここでPostgreSQLクエリで構文エラーが発生するのはなぜですか?

は私のクエリです:

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 

私の同僚は、それが9.5.2

である私のPostgreSQLのバージョンで問題になることがあり思います
+4

「インポート」とは何ですか?このクエリは本当に正常に実行されましたか? –

答えて

0

ここでの問題はimport is a reserved keyword in PostgreSQLです。したがって、二重引用符を使用せずに、またはASキーワードを使用してエイリアスとして使用することはできません。

シンプルテスト:

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); 

別のオプションは、シンプルが衝突しないよう、別の名前を選択することです1つは予約済みのキーワードリストに含まれています(私はそのオプションをお勧めします)。いずれにしても、常にASを使用することは、事態をより明示的にし、このような問題を避けるための良い考えです。

関連する問題