Добрый день!
Встала задача, перевести 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.