Я пишу сценарий импорта данных в Tcl (от SQL Server до Postgres) и должен вызвать командную строку unix tr
, чтобы удалить нулевые символы в файле данных.Я записываю данные во временный файл, а затем использую exec
для обработки файла через tr
.
. Вызов tr
, который я хотел бы генерировать с помощью Tcl, выглядит следующим образом в командной строке:
tr -d '\000' < blah >blah.notnull
Код Tcl, который я использую для создания вышеприведенного кода, таков: $STATE(TMP)
содержит временный файл:
set ret [catch {exec tr -d '\\000' < $STATE(TMP) > $STATE(TMP).clean}]
Однако иногда это не работает, и PostgreSQL COPY завершается неудачноиз-за х00 символов.Если я запускаю версию командной строки для файла, то 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-сервера и т. Д., Поскольку все стандартные инструменты не работают с размером наших данных.)
Благодарявсем кто читает или ответит!