Postgresql

copy 命令中的非標準標識符錯誤

  • August 12, 2021

希望能夠COPY在 PostgreSQL 中執行命令時在模式名稱中添加像“-”這樣的字元。有什麼辦法可以解決這個問題?

psql -d postgres -c "\COPY (SELECT * FROM test-schema.tableName) TO data.csv DELIMITER ',' CSV"
ERROR:  syntax error at or near "-"`enter code here`
LINE 1: COPY  ( SELECT * FROM test-schema.tableName ) TO STDOUT DELIMITER ',...

該錯誤與架構和表名的非法標識符COPY有關,並且與(也與您實際使用的psql meta-command )沒有直接關係。\copy使用雙引號:

"test-schema"."tableName"

(假設您將表註冊為"tableName",而不是tablename,這將是更可取的。)

由於您也在 shell 中雙引號命令參數,您需要轉義添加的雙引號:

psql -d postgres -c "\copy (SELECT * FROM \"test-schema\".\"tableName\") TO data.csv DELIMITER ',' CSV;"

或者在 shell 中使用單引號並在字元串中使用美元引號:

psql -d postgres -c '\copy (SELECT * FROM "test-schema"."tableName") TO data.csv DELIMITER $$,$$ CSV;'

對於不需要雙引號的合法小寫標識符,您不會遇到任何這些問題。看:

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