sql — Миграция с Postgres на Sybase с помощью PHP-скрипта

Я хочу перенести около 10 таблиц из Postgres в Sybase с помощью PHP-скрипта.

Итак, я закончил скрипт удаления, который просто очищает все нужные таблицы в целевой базе данных.

На данный момент migrate-скрипт может подключаться к обеим базам данных и распечатывать содержимое. Кроме того, я считаю строки для проверки, соответствует ли таблица назначения исходной таблице, следуя более позднему INSERT (я недавно узнал о параметре @@ ERROR, который правильно проверяет успешность SQL и корректирует его).


Моя проблема сейчас заключается в том, что я получаю сообщение об ошибке:

Предупреждение: sybase_query (): Sybase: сообщение сервера:
Неверный синтаксис около ‘1’. (уровень серьезности 15, процедура не применима) в … / … / …

при попытке вставить выбранные строки из базы данных Postgres в базу данных Sybase.
Поэтому я использовал метод fetch_assoc для чтения данных для каждой строки. Проблема этого метода, он будет возвращать строку вместо целого числа, как показано здесь: http://php.net/manual/de/function.pg-fetch-assoc.php

Конкретный момент в моем коде выглядит следующим образом:

                while ($row = pg_fetch_assoc($result)) {
$insert_dst = $destDB->query("SET IDENTITY_INSERT " . $dst_sy_tbl . " ON INSERT INTO " . $dst_sy_tbl . " (Integerfield, SOME_TEXT1, SOME_TEXT2) VALUES(". $row['integerfield'] . " '" . $row['some_text1'] . "', '" . $row['sometext2'] . "')"  );
}

Целое число исходных таблиц форматируется как int4, целое число таблицы назначения является числовым (8,0). Упомянутый метод теперь пытается вставить строку в столбец «integerfield», которая ожидает целое число, отформатированное в numeric (8,0).

Есть ли лучший способ в PHP для получения данных из Postgres, чтобы они сохранялись «как есть», без предварительного форматирования в строку и необходимости преобразования строки обратно в целое число после этого?


Примечание: я также попытался получить желаемый результат с простым SQL, как показано на доске здесь: Вставить в … значения (SELECT … FROM …)

Но при выполнении этого в моем инструменте для работы с базой данных у него не было разрешения на доступ к SRC_Table, потому что он расположен в другой базе данных. — Может быть, в php-скрипте это будет работать, так как оба соединения уже установлены, и я смог напечатать содержимое обеих таблиц.

SET IDENTITY_INSERT DST_Table ON INSERT INTO db_name.of.DST_Table(Integer, SOME_TEXT1, SOME_TEXT2) SELECT integer, some_text1, some_text2 FROM db_name.of.SRC_Table;

1

Решение

Если вы можете использовать инструменты импорта / экспорта …

Вы должны посмотреть на использование BCP инструмент для импорта данных в Sybase.

это аналогичные ТАК даст вам некоторую помощь в использовании синтаксиса. если ты экспорт из Postgres в формат CSV например, вы сможете BCP эти данные в Sybase ASE

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]