使用 psql 的 \copy 进行多行查询
Use psql's \copy for a multi-line query
这是 this answer for "Save PL/pgSQL output from PostgreSQL to a CSV file 的后续问题。
我需要使用 psql \copy
command 编写客户端 CSV 文件。一个班轮工作:
db=> \copy (select 1 AS foo) to 'bar.csv' csv header
COPY 1
但是,我有跨越多行的长查询。我不需要显示查询,因为我似乎无法在没有解析错误的情况下扩展这一行:
db=> \copy (
\copy: parse error at end of line
db=> \copy ( \
\copy: parse error at end of line
db=> \copy ("
\copy: parse error at end of line
db=> \copy "(
\copy: parse error at end of line
db=> \copy \
\copy: parse error at end of line
是否可以将 \copy
用于跨多行的查询?我在 Windows.
上使用 psql
我现在的工作解决方案是 create a temporary view,它可以在多行中声明,然后 select 从它在 \copy
命令中,它适合一个线。
db=> CREATE TEMP VIEW v1 AS
db-> SELECT i
db-> FROM generate_series(1, 2) AS i;
CREATE VIEW
db=> \cd /path/to/a/really/deep/directory/structure/on/client
db=> \copy (SELECT * FROM v1) TO 'out.csv' csv header
COPY 2
db=> DROP VIEW v1;
DROP VIEW
我们可以使用 HEREDOC
将多行 SQL 馈送到 psql
并使用
# Putting the SQL using a HEREDOC
tr '\n' ' ' << SQL| \psql mydatabase
\COPY (
SELECT
provider_id,
provider_name,
...
) TO './out.tsv' WITH( DELIMITER E'\t', NULL '', )
SQL
来源:https://minhajuddin.com/2017/05/18/how-to-pass-a-multi-line-copy-sql-to-psql/
这是 this answer for "Save PL/pgSQL output from PostgreSQL to a CSV file 的后续问题。
我需要使用 psql \copy
command 编写客户端 CSV 文件。一个班轮工作:
db=> \copy (select 1 AS foo) to 'bar.csv' csv header
COPY 1
但是,我有跨越多行的长查询。我不需要显示查询,因为我似乎无法在没有解析错误的情况下扩展这一行:
db=> \copy (
\copy: parse error at end of line
db=> \copy ( \
\copy: parse error at end of line
db=> \copy ("
\copy: parse error at end of line
db=> \copy "(
\copy: parse error at end of line
db=> \copy \
\copy: parse error at end of line
是否可以将 \copy
用于跨多行的查询?我在 Windows.
我现在的工作解决方案是 create a temporary view,它可以在多行中声明,然后 select 从它在 \copy
命令中,它适合一个线。
db=> CREATE TEMP VIEW v1 AS
db-> SELECT i
db-> FROM generate_series(1, 2) AS i;
CREATE VIEW
db=> \cd /path/to/a/really/deep/directory/structure/on/client
db=> \copy (SELECT * FROM v1) TO 'out.csv' csv header
COPY 2
db=> DROP VIEW v1;
DROP VIEW
我们可以使用 HEREDOC
将多行 SQL 馈送到 psql
并使用
# Putting the SQL using a HEREDOC
tr '\n' ' ' << SQL| \psql mydatabase
\COPY (
SELECT
provider_id,
provider_name,
...
) TO './out.tsv' WITH( DELIMITER E'\t', NULL '', )
SQL
来源:https://minhajuddin.com/2017/05/18/how-to-pass-a-multi-line-copy-sql-to-psql/