[Windows 10]psql 中 /copy 命令的表名中包含的美元符号转义问题
[Windows 10]Problem escaping dollar sign contained in tablename for /copy command in psql
我正在尝试设置一个 shell 脚本以将数据从 .csv 文件插入到 postgreSQL 中。作为第一个测试,我只是尝试在终端命令中执行 rto,但我 运行 遇到了问题,因为我的 table 名称中有一个“$”,我无法想出到目前为止逃避它的正确方法。
我的命令是这样的:
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 电源shell。
您可以在 table 名称周围添加转义双引号
psql -d trm -h localhost -p 5432 -U postgres -c "\COPY
\"ts_dev.tbl$trm_secndry_readings\" from 'FILEPATH' with delimiter ',' ;"
在 POSIX 兼容的 shell 中,例如 bash
和 PowerShell,$
是一个 元字符 ,它在不加引号的情况下使用或在 "..."
内 - 需要 escaping 才能被解释 verbatim (以便按原样传递给命令) .
但是,转义字符在这两个 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 ',' ;"
我正在尝试设置一个 shell 脚本以将数据从 .csv 文件插入到 postgreSQL 中。作为第一个测试,我只是尝试在终端命令中执行 rto,但我 运行 遇到了问题,因为我的 table 名称中有一个“$”,我无法想出到目前为止逃避它的正确方法。
我的命令是这样的:
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 电源shell。
您可以在 table 名称周围添加转义双引号
psql -d trm -h localhost -p 5432 -U postgres -c "\COPY
\"ts_dev.tbl$trm_secndry_readings\" from 'FILEPATH' with delimiter ',' ;"
在 POSIX 兼容的 shell 中,例如 bash
和 PowerShell,$
是一个 元字符 ,它在不加引号的情况下使用或在 "..."
内 - 需要 escaping 才能被解释 verbatim (以便按原样传递给命令) .
但是,转义字符在这两个 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 ',' ;"