使用PHP脚本从Postgres迁移到Sybase

时间:2017-03-09 13:19:10

标签: php sql postgresql database-migration sybase-ase

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

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

截至目前,migrate-script能够连接到两个数据库并打印出内容。除此之外,我正在计算行以检查目标表是否与源表匹配,遵循后面的INSERT(我最近学习了参数@@ ERROR,它正确地检查了SQL的成功并将进行调整)。

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

  

警告:sybase_query():Sybase:服务器消息:   ' 1'附近的语法不正确。 (严重程度15,程序N / A)在... / ... / ...

尝试将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'] . "')"  );
                }

源表integer的格式为int4,目标表integer为numeric(8,0)。所提到的方法现在尝试将一个字符串插入到列" integerfield"需要一个用数字(8,0)格式化的整数。

在PHP中有没有更好的方法从Postgres接收数据,以便它们存储"按原样#34;,而不首先将其格式化为字符串,并且需要将字符串转换回之后的整数?

注意:我也尝试使用普通SQL获得希望的结果,如电路板上所示:Insert into ... values ( SELECT ... FROM ... )

但是在我的databasetool上执行它时,它缺少访问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 个答案:

答案 0 :(得分:0)

如果您可以使用导入/导出工具......

您应该使用BCP工具将数据导入Sybase。

这个similar SO Post将为您提供有关使用语法的帮助。例如,如果您export from Postgres into CSV format,则可以将该数据BCP到Sybase ASE中