Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 水滴';将数据从Informix迁移到Postgres_Postgresql_Export_Informix_Database Migration - Fatal编程技术网

Postgresql 水滴';将数据从Informix迁移到Postgres

Postgresql 水滴';将数据从Informix迁移到Postgres,postgresql,export,informix,database-migration,Postgresql,Export,Informix,Database Migration,我正在将Informix(11.7)DB迁移到PostgreSQL(9.2)。只有一个问题:如何将blob(映像)从Informix移动到PostgreSQL(9.2)?非常感谢 我使用Jython和JDBC在各种数据库之间进行了一些这样的转换 您所需要的只是CLASSPATH中的Informix和PostgreSQL JDBC驱动程序 我有一个Informix表和一个PostgreSQL表,分别有BYTE列和BYTEA列: -- Informix CREATE TABLE _blob_test

我正在将Informix(11.7)DB迁移到PostgreSQL(9.2)。只有一个问题:如何将blob(映像)从Informix移动到PostgreSQL(9.2)?非常感谢

我使用Jython和JDBC在各种数据库之间进行了一些这样的转换

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

我有一个Informix表和一个PostgreSQL表,分别有
BYTE
列和
BYTEA
列:

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

-- PostgreSQL
CREATE TABLE _blob_test (
  id integer PRIMARY KEY,
  image BYTEA
)
然后可以使用JDBC
getObject()/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)

我使用Jython和JDBC在各种数据库之间进行了一些这样的转换

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

我有一个Informix表和一个PostgreSQL表,分别有
BYTE
列和
BYTEA
列:

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

-- PostgreSQL
CREATE TABLE _blob_test (
  id integer PRIMARY KEY,
  image BYTEA
)
然后可以使用JDBC
getObject()/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)

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

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

您需要postgres的数据类型还是有任何具体问题?您正在寻找的数据类型是postgres中的bytea。如何将非blob数据迁移到PostgreSQL?PostgreSQL喜欢什么格式来加载blob数据?您要迁移多少个带有BLOB的表?这些表中有多少行?水滴有多大(最小、平均、最大)?您处理的是哪种Informix类型的文本、字节、BLOB和CLOB?它们都是blob类型。@JonathanLeffler:存储Informix文本、字节、blob和CLOB数据的规范是什么?什么意思,@FrankComputer?文本和字节blob比其他两种类型(版本9.00)旧(版本4.00),可以存储在表或blob空间中。BLOB和CLOB类型用于“智能BLOB”,并存储在智能BLOB空间中(不同)。关于如何将值输入数据库并再次返回,有复杂的规则。如果使用卸载格式,也有一组关于如何卸载的规则。因此,未回答问题的列表不断增加…@FrankComputer:它们以不透明的格式存储在内部,令人难以置信。当然,大量磁盘空间只是数据,但控制信息是复杂的——有些在表行的blob描述符中,而有些在存储blob的blob空间或智能blob空间中(存储在表中时除外)。没有关于如何获取原始blob数据的外部文档(您可以看到的内容)。您需要postgres的数据类型还是有任何具体问题?您正在寻找的数据类型是postgres中的bytea。如何将非blob数据迁移到PostgreSQL?PostgreSQL喜欢什么格式来加载blob数据?您要迁移多少个带有BLOB的表?这些表中有多少行?水滴有多大(最小、平均、最大)?您处理的是哪种Informix类型的文本、字节、BLOB和CLOB?它们都是blob类型。@JonathanLeffler:存储Informix文本、字节、blob和CLOB数据的规范是什么?什么意思,@FrankComputer?文本和字节blob比其他两种类型(版本9.00)旧(版本4.00),可以存储在表或blob空间中。BLOB和CLOB类型用于“智能BLOB”,并存储在智能BLOB空间中(不同)。关于如何将值输入数据库并再次返回,有复杂的规则。如果使用卸载格式,也有一组关于如何卸载的规则。因此,未回答问题的列表不断增加…@FrankComputer:它们以不透明的格式存储在内部,令人难以置信。当然,大量磁盘空间只是数据,但控制信息是复杂的——有些在表行的blob描述符中,而有些在存储blob的blob空间或智能blob空间中(存储在表中时除外)。没有关于如何获取原始blob数据的外部文档(您可以看到)。