为啥不能在多行执行 PSQL 元命令
Posted
技术标签:
【中文标题】为啥不能在多行执行 PSQL 元命令【英文标题】:Why PSQL meta command cannot be execute at mutliline为什么不能在多行执行 PSQL 元命令 【发布时间】:2022-01-17 12:11:15 【问题描述】:刚发现\COPY
命令只能在一行执行,多次尝试this答案的查询。
这种方式对于编写长查询似乎很不友好。而且不容易找出原因。
我不认为这是一个错误,那么为什么。
【问题讨论】:
为什么?因为它是这样实现的。 It is documented though "解析参数在行尾停止,或者在找到另一个未引用的反斜杠时停止。...但无论如何,元命令的参数不能继续超出行尾。 " 【参考方案1】:从这里psql,如果您要复制到文件中:
获得与\copy ... to 相同结果的另一种方法是使用SQL COPY ... TO STDOUT 命令并用\g 文件名或\g |程序终止它。与 \copy 不同,此方法允许命令跨越多行;也可以使用变量插值和反引号展开。
对于从文件中复制,借用 pg_dump
所做的事情:
CREATE TABLE csv_test (col1 integer, col2 integer);
cat csv_test.csv
COPY
csv_test
FROM
stdin WITH CSV;
"19","9"
"19","5"
"19","5"
"19","15"
"19","5"
\i ~/csv_test.csv
COPY 5
select * from csv_test ;
col1 | col2
------+------
19 | 9
19 | 5
19 | 5
19 | 15
19 | 5
【讨论】:
以上是关于为啥不能在多行执行 PSQL 元命令的主要内容,如果未能解决你的问题,请参考以下文章
执行多个查询时,“psql -c”和“psql -f”有啥区别?