1

我正在将 Informix (11.7) DB 迁移到 PostgreSQL(9.2)。只有一个问题:如何将 blob(image) 从 Informix 移动到 PostgreSQL(9.2)?提前谢谢了。

4

2 回答 2

1

我使用 Jython 和 JDBC 在各种数据库之间进行了一些此类转换。

您需要的只是 Informix 和 PostgreSQL JDBC 驱动程序CLASSPATH

我有带列的 Informix 表和带BYTE列的 PostgreSQL 表BYTEA

-- Informix
CREATE TABLE _blob_test (
  id integer PRIMARY KEY,
  image BYTE
)

-- PostgreSQL
CREATE TABLE _blob_test (
  id integer PRIMARY KEY,
  image BYTEA
)

然后可以使用 JDBCgetObject()/setObject()方法来复制数据:

#!/usr/bin/env jython
# -*- coding: utf8 -*-

from java.sql import DriverManager
from java.lang import Class

Class.forName("com.informix.jdbc.IfxDriver")
Class.forName('org.postgresql.Driver')

def copy_table(db_from, db_to):
    col_count = 2
    insert_stmt = db_to.prepareStatement('INSERT INTO _blob_test (id, image) VALUES (?, ?)')
    pstm2 = db_from.createStatement()
    pstm2.setFetchSize(10000)
    rs_in = pstm2.executeQuery('SELECT * FROM _blob_test')
    try:
        batch_buffer = 0
        batch_size = 100
        while (rs_in.next()):
            for i in range(1, col_count + 1):
                insert_stmt.setObject(i, rs_in.getObject(i))
            insert_stmt.addBatch()
            batch_buffer += 1
            if (batch_buffer % batch_size == 0):
                insert_stmt.executeBatch()
                batch_buffer = 0
        if (batch_buffer > 0):
            insert_stmt.executeBatch()
    finally:
        rs_in.close()
        pstm2.close()


db_from = DriverManager.getConnection('jdbc:informix-sqli://informix-test:9088/infdb:informixserver=ol_testifx;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250', 'informix', '12345')
db_to   = DriverManager.getConnection('jdbc:postgresql://pg-test:5490/pg_test?stringtype=unspecified', 'postgres', '12345')

copy_table(db_from, db_to)
于 2012-10-23T08:40:21.507 回答
0

我知道答案很晚,但这可以帮助其他人寻找解决方案。
我们公司也做过类似的迁移。
为了迁移二进制文件,我们使用了一个名为 SQL-workbench 的工具,我们使用了数据泵(菜单工具)。数据泵允许将数据从源数据库复制到目标数据库。DBMS 可能不同(在本例中为 Informix 和 Postgres)。
您必须在“文件 > 管理驱动程序”中注册两个驱动程序并创建 2 个配置文件:一个针对您的 Informix DB 的源配置文件和一个针对您的 Postgres DB 的目标配置文件。然后将从 Data pumper 中选择配置文件。 数据泵窗口 如果您有多个表要一次复制,请阅读有关使用函数 Wbcopy 的文档(非常有用)

于 2017-11-24T14:13:03.400 回答