php - 使用 PHP 脚本从 Postgres 迁移到 Sybase

标签 php sql postgresql database-migration sap-ase

我想使用 PHP 脚本将大约 10 个表从 Postgres 迁移到 Sybase。

到目前为止,我已经完成了删除脚本,它只是清空了目标数据库中所有需要的表。

截至目前,迁移脚本能够连接到两个数据库并打印出内容。除此之外,我正在计算行数以检查目标表是否与源表匹配,然后是后来的 INSERT(我最近了解到参数 @@ERROR 正确检查成功的 SQL 并将对其进行调整)。


我现在的问题是我收到一条错误消息:

Warning: sybase_query(): Sybase: Server message: Incorrect syntax near '1'. (severity 15, procedure N/A) in .../.../...

尝试将 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,目标表整数为 numeric(8,0)。提到的方法现在尝试将一个字符串插入到“integerfield”列中,该列需要一个格式化为 numeric(8,0) 的整数。

在 PHP 中是否有更好的方法来接收来自 Postgres 的数据,以便它们“按原样”存储,而无需先格式化为字符串,然后再将字符串转换回整数?


注意:我还尝试使用纯 SQL 获得想要的结果,如此处所示:Insert into ... values ( 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 的工具。

similar SO Post会给你一些语法使用的帮助。如果你export from Postgres into CSV format例如,您将能够将该数据 BCP 到 Sybase ASE

关于php - 使用 PHP 脚本从 Postgres 迁移到 Sybase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42696468/

相关文章:

php - 循环 PHP 脚本

php - 查找最早日期 - PHP

mysql - 将 MySQL 转换为 Postgres

postgresql - 我可以从 Postgres 函数返回字符串列表吗?

django - 创建 Heroku Django 应用程序后 syncdb 出现问题

php mysql查询出所有单词,但不重复

php - php xpath解析脚本src

javascript - 通过 AJAX 拉入 JSON 以填充下拉列表

mysql - SQL 从表中选择具有最大日期的行

mysql - SQL - 非常复杂的查询