Я хочу перенести около 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;
Если вы можете использовать инструменты импорта / экспорта …
Вы должны посмотреть на использование BCP инструмент для импорта данных в Sybase.
это аналогичные ТАК даст вам некоторую помощь в использовании синтаксиса. если ты экспорт из Postgres в формат CSV например, вы сможете BCP эти данные в Sybase ASE
Других решений пока нет …