2016-01-20 1 views
0

Я запускаю файл bash для обработки некоторых задач psql. Тем не менее, я хотел бы, чтобы текстовый файл, содержащий запрос (fp_query.txt), принял разрывы строк для повышения удобочитаемости. В настоящее время я получаю эту ошибку:Возможны разрывы строк в файле запроса psql?

parse error at end of line 

, когда я поддерживаю разрывы строк. Есть ли способ заставить интерпретатор игнорировать разрывы строк, чтобы я мог сохранить их в файле запроса?

Для справки, вот .sh файл:

export PGPASSFILE=.pgpass 
psql -h [hostname] -d [dbname] -U [user] -f fp_query.txt 

И вот fp_query.txt:

\copy (SELECT created_at::date, COUNT(*) 
    FROM ela_snapshots 
    WHERE created_at::date > CURRENT_DATE - 30 
    GROUP BY 1) to 'ELA_comp_tot_daily_sess.csv' with CSV HEADER 

ответ

1

Проблема заключается не в том, что у вас есть разрывы строк в файле запроса, но у вас есть разрывы строк внутри мета-команды \copy. В соответствии с пунктом the "Meta-Commands" section of the psql documentation for PostgreSQL 9.5:

Parsing for arguments stops at the end of the line, or when another unquoted backslash is found. An unquoted backslash is taken as the beginning of a new meta-command. The special sequence \\ (two backslashes) marks the end of arguments and continues parsing SQL commands, if any. That way SQL and psql commands can be freely mixed on a line. But in any case, the arguments of a meta-command cannot continue beyond the end of the line.

(выделено мной). Это было бы одинаково верно, если бы вы запускали это в интерактивном приглашении psql.

Один способ обхода может быть create a temporary function consisting of your query, и с вашей мета-командой \copy выполняется запрос, который просто вызывает эту функцию.