【发布时间】:2019-02-01 03:42:03
【问题描述】:
我正在用 Tcl 编写一个数据导入脚本(从 SQL Server 到 Postgres),并且必须调用命令行 unix tr 来清除数据文件中的空字符。我将数据写入临时文件,然后使用exec 通过tr 处理文件。
我希望 Tcl 生成的 tr 调用在命令行上如下所示:
tr -d '\000' < blah >blah.notnull
我用来制作上面的 Tcl 代码是这样的,$STATE(TMP) 保存临时文件:
set ret [catch {exec tr -d '\\000' < $STATE(TMP) > $STATE(TMP).clean}]
但是,有时这不起作用并且 PostgreSQL COPY 由于 x00 个字符而失败。如果我在文件上运行命令行版本,则 COPY 成功。
有人可以帮助我理解 exec 调用以及引用和反斜杠吗?我有点难过。
错误信息,PG错误的重新格式化版本:
Problem with COPY on blahblah: PGRES_FATAL_ERROR, ERROR: invalid byte sequence for encoding "UTF8": 0x00
令人讨厌的是,Tcl exec 代码经常有效,但并非总是如此。
(我们正在使用 Tcl、Linux、BCP、SQL 服务器等手动滚动导入系统,因为所有现成的工具都因我们的数据大小而失败。)
感谢所有阅读或回答的人!
【问题讨论】:
标签: postgresql tcl exec