powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / reload table with text field from sybase ASE to Postgree
6 сообщений из 6, страница 1 из 1
reload table with text field from sybase ASE to Postgree
    #40047664
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня...

Столкнулся с проблемой перзагрузки данных с SybaseASE на PostgreSQL
С обычными таблицами вроде разобрался, пришлось для некоторых таблиц делать VIEW
которые и выгружал через BCP, в которых datetime переделывать на convert(varchar(24),datetime_field,23)
и в строковых полях заменять спецсимволы на пробел и просто убирать ...
str_replace(str_replace(str_replace(COMPOUND,char(0xd),''),char(0xa),''),char(0x9),'') as COMPOUND

А вот с полями типа TEXT это не прокатывает ... можно их конечно convert(varchar(16384),...) но
увы есть данные размером побольше (у нас там лежат всякие HTML тексты в которых встречаются
и перевод строки и табуляции).

Когда я переливал данные между Sybase или MSSQL то там можно задать спец. row_termintator
типа вот так
set BCP=C:\Sybase\OCS-15_0\bin\bcp64.exe
set BCPPARAM=-S%SRV% -U%UID% -P%PSW% -A 8192 -c -t \x01 -r \x02 -Jcp1251
%BCP% %DBN%..%1 out %OUTDIR%\%1.txt %BCPPARAM%

а в PostgreSQL оказалось НЕТ такого понятия как row terminator (или row delimiter) :-(((

Как быть?
Неужели придется писать для ЭТОГО очередную "приблуду" ?
Неужели нельзя все это сделать с помощью PSQL ?

PS: Данные я конечно перелил ... с помощью PowerBuilder - PipeLine ... но хотелось как то "изящней"
...
Рейтинг: 0 / 0
reload table with text field from sybase ASE to Postgree
    #40047799
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Drive_,

Поскольку вы не написали как именно вы в postgresql данные загружаете
и какую проблему/ошибку от базы получаете
то помочь вам вряд ли кто то сможет...

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
reload table with text field from sybase ASE to Postgree
    #40047811
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Drive_,

Ни разу не понятно о каком терминаторе вы говорите и почему он так важен?

PostgreSQL умеет работать с данными в разных кодировках, бинарными, CSV и прочими форматами.
По моему опыту, работать с ним удобнее, чем с Oracle или MS SQL.

Можно тут что-то найти для ваших целей: https://www.postgresql.org/download/products/1-administrationdevelopment-tools/
Также вы можете подцепить ваши таблицы из Sybase напрямую в Postgres-е через https://github.com/tds-fdw/tds_fdw
...
Рейтинг: 0 / 0
reload table with text field from sybase ASE to Postgree
    #40047815
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня ..

сорри забыл указать способ загрузки в Postgre
вот BAT файл-
set ISQL="С:\PostgreSQL\10\bin\psql.exe"
%ISQL% -h 192.168.1.159 -p 5432 -U user -d myDB_dev -f %1.sql

и сам SQL файл-

truncate table medicine;
\copy medicine from g:\\unload\\data\\medicine.txt with (delimiter E'\x1', encoding 'UTF8', NULL '');

его как параметр передаю в тот BAT файл
...
Рейтинг: 0 / 0
reload table with text field from sybase ASE to Postgree
    #40047830
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня

Ура получилось!!!

Но пришлось выгружать ЭТУ таблицу не с SybaseASE 15.7 а с SybaseSQLAnywhere 12
у нас на обоих серверах есть жта таблица
И способ выгрузки с SQLAnywhere другой

вот BAT файл-

set ENG=pinets_cons
set HOST=192.168.1.88
set PORT=3638

set UID=
set PSW=
set ISQL="C:\SQL Anywhere 12\Bin64\dbisql.exe"

%ISQL% -c "ENG=%ENG%;Commlinks=tcpip(host=%HOST%);UID=%UID%;PWD=%PSW%" -d1 -nogui %1.sql -onerror continue

а вот SQL файл-
set temporary option allow_write_client_file=On;
unload table medicine into client file 'g:\unload\data\medicine.txt' format bcp delimited by '\x09' quote '' byte order mark OFF ENCODING 'UTF-8';

В результате в выходном файле в полях (LONG VARCHAR) все спец. символы были заменены на \x0a \x0d \x09 и т.д.
а вот разделитель полей НОРМАЛЬНАЯ табуляция и разделитель строк - перевод строки

Загрузка на PostgreSQL как и раньше через PSQL
вот так ..
truncate table medicine;
\copy medicine from g:\\unload\\data\\medicine.txt with (format text, delimiter E'\t', encoding 'UTF8', NULL '');

PS: а для ASE я так ничего и не придумал...
PS: еще нюанс - командой UNLOAD TABLE можно выгрузить только TABLE а вот VIEW нельзя...
...
Рейтинг: 0 / 0
reload table with text field from sybase ASE to Postgree
    #40047832
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз доброго дня ..

чтобы было понятней что за данные можно зайт на наш сайт
https://aptekamos.ru/tovary/lekarstva/bovgialuronidaza-azoksimer-9104/longidaza-liofilizat-dlya-inekciyo-3000me-34449/instrukciya
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / reload table with text field from sybase ASE to Postgree
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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