PostgreSQL PSQL 客户端命令和新行 (\COPY)

Kem*_*hou 5 postgresql client psql copy

错误信息与使用 COPY 的超级用户相同。这些文件与 postgres 服务器位于同一台服务器上。看到很多类似的帖子,但没有一个回答我的问题。

\copy table_name from '/path/to/csv/file.csv'
with format csv, header true ;

ERROR: syntax error at or near "format"
Run Code Online (Sandbox Code Playgroud)

是否带括号。仔细阅读postgres版本 10的手册。没有帮助。我一定遗漏了一些小问题,请指出。

Cra*_*ger 6

psql“元命令”

psql 中以反斜杠 ( \)开头的命令称为“元命令”,它们不遵循通常的分号规则,而是以换行符终止。一小段摘自man psql

参数解析在行尾停止,或者在找到另一个未加引号的反斜杠时停止。未加引号的反斜杠被视为新元命令的开头。特殊序列\\(两个反斜杠)标记参数的结束并继续解析 SQL 命令(如果有)。这样 SQL 和 psql 命令可以在一行中自由混合。但无论如何,元命令的参数不能超出行尾。

许多在手册页更说这一点。是的,这很奇怪也很烦人。这是因为历史上 psql 命令是一种您希望在不中断您正在构建的任何查询的情况下运行的元命令,例如 \d 查看表的列。但是对于像\copy它这样的伪语句会让人感到困惑。

这里发生了什么事

在您的情况下,发生的事情是psql运行第一行,然后将第二行发送到 postgres 服务器,该服务器识别WITH有效的 CTE 语句令牌,然后被FORMAT.

你想要的是,

\copy table_name from '/path/to/csv/file.csv' with format csv, header true
Run Code Online (Sandbox Code Playgroud)