使用PHP脚本从Postgres迁移到Sybase

使用PHP脚本从Postgres迁移到Sybase,php,sql,postgresql,database-migration,sap-ase,Php,Sql,Postgresql,Database Migration,Sap Ase,我想用PHP脚本将大约10个表从Postgres迁移到Sybase 到目前为止,我已经完成了delete脚本,它只是清空了目标数据库中所有需要的表 到目前为止,迁移脚本能够连接到这两个数据库并打印出内容。除此之外,在后面的插入之后(我最近了解到parameter@@ERROR,它正确地检查SQL是否成功,并将对此进行调整),我正在计算行数以检查目标表是否与源表匹配 我现在的问题是收到一条错误消息: 警告:sybase_query():sybase:服务器消息: “1”附近的语法不正确。(严重程

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

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

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


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

警告:sybase_query():sybase:服务器消息: “1”附近的语法不正确。(严重程度为15,程序不适用)

尝试将Postgres数据库中的选定行插入Sybase数据库时。 因此,我使用fetch_assoc方法读取每行的数据。此方法的问题在于,它将返回字符串而不是整数,如下所示:

我的代码中的特定点如下所示:

                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获得期望的结果,如图所示:

但在我的databasetool上执行此操作时,它缺少访问SRC_表的权限,因为它位于不同的数据库上。-在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;

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

您应该了解如何使用该工具将数据导入Sybase


这将在要使用的语法方面为您提供一些帮助。例如,如果可以使用导入/导出工具,则可以将该数据BCP到Sybase ASE中

您应该了解如何使用该工具将数据导入Sybase


这将在要使用的语法方面为您提供一些帮助。例如,如果您能够将该数据BCP到Sybase ASE中

我完全误解了错误消息,并认为如果结果集的每一行都作为字符串给出是不好的。最后,我将放入一个SQLINSERT命令,该命令无论如何都是由字符串组成的。我的错误是,我把整数作为“1”而不是仅仅1。另一个错误是错误的比较方法,我从GO direction Sybase向Postgres脚本盲复制,对于Postgres向Sybase的返回方向,我必须将“string”调整为“varchar”,将“datetime”调整为“timestamp”,我完全误解了错误消息,认为如果结果集的每一行都作为字符串给出是不好的。最后,我将放入一个SQLINSERT命令,该命令无论如何都是由字符串组成的。我的错误是,我把整数作为“1”而不是仅仅1。另一个错误是错误的比较方法,我从GO direction Sybase向Postgres脚本复制blind,对于Postgres向Sybase的返回方向,我必须将“string”调整为“varchar”,将“datetime”调整为“timestamp”