为啥不能在多行执行 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”有啥区别?

为啥shell脚本中不能执行cd 命令

如何使用 psql \copy 元命令忽略错误

linux shell ssh调用,为啥只能循环一次(TEST文件里多行,只能执行一行)

PostgreSQL操作-psql基本命令

OleDbCommand 不能执行这个命令,为啥?