mysql을 postgresql로 변환하는 방법? [닫은]


14

필자는 큰 mysql 데이터베이스를 postgresql로 변환하는 변환 도구를 필사적으로 찾고 있습니다. 도구 / 스크립트가 필요합니다 :

  • 비어 있는
  • 리눅스에서 작동
  • 사용하기 쉽고 버그가 없습니다.
  • 실제로 시도하고 작동하는지 확인하십시오.
  • Java 또는 Ruby로 작성하지 않는 것이 좋습니다.

여기 에 나열된 다른 도구를 시도 했지만 아무도 효과가 없었습니다.

미리 감사드립니다.


저는 여전히 PostgreSQL 전문가가 아니며 스스로 배우고 있습니다. 나는 대답을 제거했다. 그러나 다른 사람이 게시 한 postgresql과 함께 mysqldump를 사용하는 것에 대한 또 다른 질문이 있습니다 : dba.stackexchange.com/q/9792/877 . 희망이 있습니다 !!!
RolandoMySQLDBA

1
Java로 작성된 도구에 어떤 문제가 있습니까? 그리고 그들 모두와 정확히 " 작동하지 않는 "것을 묘사하면 도움이 될 것입니다.
a_horse_with_no_name

답변:


7

서로 다른 두 DBMS간에 마이그레이션하려면 를 많이 보다 단지 데이터를 마이그레이션하는 것보다. 그러나 데이터 마이그레이션은 일반적으로 가장 쉬운 부분입니다.

내가 시도한 방식은 무료이며 작동하는지 확인할 수 있습니다.

  • mysql 스키마 전용 덤프를 만듭니다.
  • 텍스트 편집기와 많은 검색 및 바꾸기를 사용하여 SQL을 조정하십시오.
  • Postgres에서 변환 된 SQL 실행
  • MySQL에서 일반 텍스트 덤프를 만듭니다 (예 : CSV 또는 다른 구분 형식)
  • PostgreSQL의 COPY 명령을 사용하여 데이터 가져 오기

2 월 31 일과 같이 잘못된 데이터를 수락하는 MySQL의 동작에 의존하는 경우 실제로 데이터를 가져 오는 것이 어려울 수 있습니다.

내 생각에 이것은 도구를 검색하고 도구를 평가 한 다음 선택한 도구를 이해하려고 시도하는 것보다 빠를 것입니다. 그러나 그것은 당신이 말하는 "큰"종류에 달려 있습니다. 큰 테이블이 수백 개의 테이블 인 경우에는 불가능할 수 있습니다. 큰 행 수만 참조하는 경우 가장 빠른 방법 일 것입니다.

Liquibase , SchemaSpy 또는 WbSchemaReport 와 같은 DBMS 독립 (XML) 형식으로 데이터베이스 스키마를 덤프 할 수있는 몇 가지 도구가 있습니다. . 아마도 Liquibase가 가장 사용하기 쉬울 것입니다. 나머지는 생성 된 XML을 변환하기 위해 XSLT를 수동으로 작성 / 확장해야합니다.

MySQL에서 트리거 및 저장 프로 시저를 사용하는 경우 나중에 수동으로 수정하지 않아도 번역 할 수 있는 자동화 된 도구 가 없다고 생각 합니다. 생성 된 프로시 저는 아마도 대상 DBMS의 고급 기능을 사용하지 않을 것입니다 .


6

최근에 해왔고 도구를 찾고 도구를 사용하는 데 너무 오래 걸렸기 때문에 vim과 replacement-foo로 한 손으로 해냈습니다.

  • 다음 INT NOT NULL AUTO_INCREMENT과 같이 바꾸십시오 (또는 이와 같은 것)SERIAL
  • (A) 내로 관련 everythig 문자열 변화 TEXT(사용에는 속도 차이를 TEXT, VARCHAR또는 유사한)
  • 그 역학을 제거하십시오 `
  • Postgres에 스토리지 엔진이 없으므로 제거하십시오 ENGINE InnoDB(또는 무엇이든)
  • 없애다 UNSIGNED
  • 모든 BLOB 필드는 BYTEA
  • 문자열은 작은 따옴표를 사용 '하고 다른 것은 사용 하지 않습니다
  • 9.1부터 Postgres 지원에서 문자열 연결을 사용하는 경우주의를 기울여야합니다 CONCAT 비표준 문자열 연결에 대한 폴백으로 9.1을 사용하기 전에 'string' || ' string'
  • 절차 코드를 다시 작성하십시오 ...
  • 예약 된 이름 (예 : 테이블, 이름, ...)과 대문자 이름을주의하십시오. 큰 따옴표로 묶어야합니다."
  • 구문은 다르지 않기 때문에 색인은 거의 동일해야합니다.
  • 내가 잊어 버린 모든 것에 대해서는 이 주제에 대한 wikibook을 확인하십시오.

각 글 머리 기호는 단일 대체로 수행해야합니다.

스키마와 데이터를 별도로 내보냈습니다 . INSERT대신 s 를 사용하십시오 COPY. 진행중인 펜스가 없으면 데이터를 정리할 필요가 없습니다. 모든 것이 켜져 있는지 확인하십시오 UTF-8. 두 개의 별도 파일을 사용하면 스키마를보다 관리하기 쉽고 편집 할 1GB 파일이 없습니다.

스키마를로드 할 때 오류가 발생한 위치에 대한 자세한 정보를 얻을 수 있으므로 디버깅이 매우 간단합니다.


안녕하세요, MySQL의 BLOB 필드 데이터를 PostgreSQL의 BYTEA로 어떻게 변환합니까? 삽입 SQL로 Mysql의 데이터를 덤프하면 PostgreSQL에서 데이터를로드 할 수 없습니다.
francs

1

나는 이것을 시도한 적이 없지만 Tungesten Replicator 가 원하는 것을 할 수 있습니다. 주로 복제 도구이지만 적어도 데이터 조각에 도움이되는 부트 스트랩 프로세스가있을 수 있다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.