Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / PostgreSQL |
![]() ![]() |
_Drive_ Member Откуда: Москва Сообщений: 174 |
Всем доброго дня... Столкнулся с проблемой перзагрузки данных с 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 ... но хотелось как то "изящней" |
21 фев 21, 14:32 [22284403] Ответить | Цитировать Сообщить модератору |
Maxim Boguk Member Откуда: Melbourne, Австралия Сообщений: 4581 |
_Drive_, Поскольку вы не написали как именно вы в postgresql данные загружаете и какую проблему/ошибку от базы получаете то помочь вам вряд ли кто то сможет... -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru |
22 фев 21, 00:02 [22284600] Ответить | Цитировать Сообщить модератору |
vyegorov Member Откуда: Баньоло-ин-Пьяно Сообщений: 1227 |
_Drive_, Ни разу не понятно о каком терминаторе вы говорите и почему он так важен? PostgreSQL умеет работать с данными в разных кодировках, бинарными, CSV и прочими форматами. По моему опыту, работать с ним удобнее, чем с Oracle или MS SQL. Можно тут что-то найти для ваших целей: https://www.postgresql.org/download/products/1-administrationdevelopment-tools/ Также вы можете подцепить ваши таблицы из Sybase напрямую в Postgres-е через https://github.com/tds-fdw/tds_fdw |
22 фев 21, 01:25 [22284617] Ответить | Цитировать Сообщить модератору |
_Drive_ Member Откуда: Москва Сообщений: 174 |
Всем доброго дня .. сорри забыл указать способ загрузки в 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 файл |
22 фев 21, 07:34 [22284625] Ответить | Цитировать Сообщить модератору |
_Drive_ Member Откуда: Москва Сообщений: 174 |
Всем доброго дня Ура получилось!!! Но пришлось выгружать ЭТУ таблицу не с 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 нельзя... |
22 фев 21, 10:42 [22284643] Ответить | Цитировать Сообщить модератору |
_Drive_ Member Откуда: Москва Сообщений: 174 |
Еще раз доброго дня .. чтобы было понятней что за данные можно зайт на наш сайт https://aptekamos.ru/tovary/lekarstva/bovgialuronidaza-azoksimer-9104/longidaza-liofilizat-dlya-inekciyo-3000me-34449/instrukciya |
22 фев 21, 10:46 [22284645] Ответить | Цитировать Сообщить модератору |
Все форумы / PostgreSQL | ![]() |