2012-10-21 1 views
1

Informix (11.7) DB를 PostgreSQL (9.2)으로 마이그레이션 중입니다. 한 가지 문제가 있습니다 : Informix에서 PostgreSQL (9.2)으로 BLOB (이미지)를 이동하는 방법은 무엇입니까? 미리 감사드립니다.Informix에서 Postgres 로의 Blob의 마이그레이션 데이터

+0

데이터 유형이 포스트그레스입니까? 아니면 특별히 문제가 있습니까? 찾고있는 데이터 유형은 postgres의 bytea입니다. – mistapink

+4

비 blob 데이터를 PostgreSQL으로 어떻게 이전하고 있습니까? PostgreSQL은 blob 데이터를로드하기 위해 어떤 형식을 사용합니까? 얼룩이있는 테이블을 얼마나 많이 옮깁니 까? 이 테이블에 몇 개의 행이 있습니까? 방울이 얼마나 큽니까 (분, 평균, 최대)? 어떤 Informix 유형의 TEXT, BYTE, BLOB 및 CLOB를 다루고 있습니까? 그것들은 모두 블롭 유형입니다. –

+0

@JonathanLeffler : Informix TEXT, BYTE, BLOB 및 CLOB 데이터를 저장하기위한 사양은 무엇입니까? –

답변

1

자이 썬과 JDBC를 사용하여 다양한 데이터베이스간에 이러한 변환을 수행했습니다.

CLASSPATH의 Informix 및 PostgreSQL JDBC 드라이버 만 있으면됩니다.

#!/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) 
0

내가 아는 대답이 늦은 :

-- 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() 방법을 사용할 수 있습니다

나는 인포믹스 테이블 BYTE 컬럼 및 PostgreSQL을 테이블 BYTEA 열이 있습니다 그러나 이것은 해결책을 찾는 다른 사람들을 도울 수 있습니다.
우리 회사에서도 비슷한 마이그레이션을 수행했습니다.
우리는 SQL-workbench라는 도구를 사용하여 바이너리를 마이그레이션하기 위해 데이터 pumper (메뉴 도구)를 사용했습니다. 데이터 pumper를 사용하면 원본 DB에서 대상 DB로 데이터를 복사 할 수 있습니다. DBMS는 다를 수 있습니다 (이 경우 Informix 및 Postgres).
두 드라이버를 모두 "파일> 드라이버 관리"에 등록하고 2 개의 프로파일을 작성해야합니다. Informix DB를 대상으로하는 소스 프로파일과 Postgres DB를 대상으로하는 대상 프로파일. 그러면 프로파일이 Data pumper에서 선택됩니다. 복사 할 테이블이 여러 개인 경우 Wbcopy 기능 사용에 대한 설명서를 참조하십시오. 매우 유용합니다.