Загрузка BCP файла через \COPY

Добрый день!

Встала задача, перевести MS SQL базу на PostgreSQL.

Все вроде бы шло хорошо, до момента загрузки данных в таблицы.

Если по пунктно.
1) Postgres установлен на SLES 11
2) Создана база
Вот так:
CREATE DATABASE "FA"
WITH OWNER = postgres
ENCODING = 'WIN1251'
TABLESPACE = pg_default
LC_COLLATE = 'ru_RU.cp1251'
LC_CTYPE = 'ru_RU.cp1251'
CONNECTION LIMIT = -1;
3) Созданы типы данных
4) Создана таблица
5) Выгружаю данные из таблицы
call bcp.exe ms_to_postgresql.dbo.tUser out tUser.txt -c -t"|" -r"\n" -CACP -S*** -Usa -P***
6) Затем загружаю данные через \copy (Вот тут то загрузка и падает)

Выяснил причину падения загрузки
В таблице в одном из полей имеется символ 0x00
Его я получаю селектом на MS SQL

select len(AlterName) as LenAlterName,ascii(substring(AlterName,1,1)) as ASCII, AlterName from tUser
where len(AlterName)=0
and ascii(substring(AlterName,1,1)) IS NULL

LenAlterName ASCII AlterName
0 NULL
0 NULL
0 NULL
0 NULL
0 NULL

Вот этот NULL и есть 0x00

Остальные же строки в этом столбце абсолютно нормальные и в них получается пробел.

LenAlterName ASCII AlterName
0 32
0 32
0 32

Т.к таких таблиц у меня достаточно много, нужна ваша помощь с загрузкой.

И вот при выгрузке через BCP и просмотре через Notepad++ я вижу следующее

Вот проблема в том что BCP эти строки выгружет вот так как на картинке. А \copy эти NUL пропускает и пытается вставить другое значение в это поле.

Уже нет мыслей, что делать т.к есть и большие таблицы в которых руками такие места затереть не удасться т.к они весят более 100GB.

Back to top

(С) Виктор Вислобоков, 2008-2023