Postgresql
使用 copy 時 psql 中的變數替換
我正在使用 psql 命令 \copy 並且我想從 shell 向它傳遞一個變數(用於表名),就像我在編寫查詢腳本時所做的那樣。我在 psql 的文件中讀到:
該命令的語法類似於 SQL COPY 命令的語法。請注意,正因為如此,特殊的解析規則適用於 \copy 命令。特別是,變數替換規則和反斜杠轉義不適用。
這似乎很明確,但是我想知道是否有人知道解決方法?
您可以通過將整個命令傳遞給 psql 來規避此限制:
echo "\copy tbl FROM '/path/to/myfile.pgsql'" | psql mydb
*備註:*我自己在 MS Windows 上偶然發現了這個問題,我已經有一些東西可以使用它的標準輸入輸入 psql。我不得不結合輸入。這就是它變得非常棘手的地方。除了 Erwin 的答案之外,我想在我的觀點中分享一個有點有價值的例子,所以我在這裡發布它作為答案,以防其他人
\copy
在 Windows 平台上將數據輸入標準輸入時也需要“使用變數”。如果您想從標準輸入複製一些數據並同時使用“變數”
\copy
,括號轉義可能會變得棘手。下面是一個如何完成的範例。注意三重(原文如此!)插入符號轉義用於括號範圍列名@echo off set TBL=wd ( echo truncate %TBL%; echo \copy %TBL% (depth,path,name,created,accessed,modified,size^^^) from stdin csv C:\msys64\usr\bin\find ^ "e:/somepath" ^ -type f -printf "%%d,\"%%h\",\"%%f\",\"%%t\",\"%%a\",\"%%c\",%%s\n" ) | "C:\Program Files\PostgreSQL\9.4\bin\psql.exe" -h some.server -U user dbname