powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Загрузка BCP файла через \COPY
1 сообщений из 1, страница 1 из 1
Загрузка BCP файла через \COPY
    #39353422
Your_Madness
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Встала задача, перевести 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.

PS. Если же Postgre ставить на WIndows и создавать вот так базу
CREATE DATABASE "FA"
WITH
OWNER = postgres
ENCODING = 'WIN1251'
template = template0
LC_COLLATE = 'Russian_Russia.1251'
LC_CTYPE = 'Russian_Russia.1251'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;

Ошибок при загрузке нет.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Загрузка BCP файла через \COPY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]