我正在嘗試設定一個 shell 腳本來將 .csv 檔案中的資料插入到 postgreSQL 中。作為第一個測驗,我只是嘗試在終端命令中執行 rto 操作,但我遇到了一個問題,因為我的表的名稱中有一個“$”,到目前為止我無法想出正確的方法來逃避它。
我的命令如下所示:
psql -d trm -h localhost -p 5432 -U postgres -c "\COPY ts_dev.tbl$trm_secndry_readings from 'FILEPATH' with delimiter ',' ;"
我用這個命令做了幾個測驗,如果 tablename='test1' 命令有效,但是如果 tablename='prefix&test1' 那么命令失敗,因為終端試圖將 '$' 之后的內容決議為變數名
例如:
psql -d trm -h localhost -p 5432 -U postgres -c "\COPY schtest.prefix$name from 'FILEPATH' with delimiter ',' ;"
ERROR: relation "schtest.prefix" does not exist
我正在使用 Windows PowerShell。
![[Windows 10] psql 中 /copy 命令的表名中包含的美元符號轉義問題](https://img.uj5u.com/2022/01/05/5c25da04397c4bc89113ce204ad8065c.png)
![[Windows 10] psql 中 /copy 命令的表名中包含的美元符號轉義問題](https://img.uj5u.com/2022/01/05/dc5b638cacc246e697f746b83206699c.png)
uj5u.com熱心網友回復:
在 POSIX 兼容的 shell 中,例如bashPowerShell 和 PowerShell 中,$是一個元字符,它 - 在不加引號的使用或內部"..."- 需要轉義以便逐字解釋(以便按原樣傳遞給命令)。
但是,這兩個 shell的轉義字符不同:
- 對于 POSIX 兼容的 shell,它是
\:
psql -d trm -h localhost -p 5432 -U postgres -c "\COPY ts_dev.tbl\$trm_secndry_readings from 'FILEPATH' with delimiter ',' ;"
- 對于 PowerShell,它是
`(所謂的反引號;請參閱about_Special_Characters):
psql -d trm -h localhost -p 5432 -U postgres -c "\COPY ts_dev.tbl`$trm_secndry_readings from 'FILEPATH' with delimiter ',' ;"
uj5u.com熱心網友回復:
您可以在表名周圍添加轉義雙引號
psql -d trm -h localhost -p 5432 -U postgres -c "\COPY
\"ts_dev.tbl$trm_secndry_readings\" from 'FILEPATH' with delimiter ',' ;"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/403731.html
標籤:
上一篇:從另一個表中的值更新jsonb列
