Postgresql

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

  • October 24, 2017

錯誤資訊與使用 COPY 的超級使用者相同。這些文件與 postgres 伺服器位於同一台伺服器上。看到很多類似的文章,但沒有一個回答我的問題。

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

ERROR: syntax error at or near "format"

是否與括號綁定。仔細閱讀 postgres版本 10的手冊。沒有幫助。我一定遺漏了一些小問題,請指出。

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

引用自:https://dba.stackexchange.com/questions/189158