programing

Postgre를 마이그레이션하는 방법SQL 데이터베이스를 SQL Server 데이터베이스로 전환하시겠습니까?

skycolor 2023. 8. 5. 10:00
반응형

Postgre를 마이그레이션하는 방법SQL 데이터베이스를 SQL Server 데이터베이스로 전환하시겠습니까?

나는 포스트그레를 가지고 있습니다.SQL Server로 이동하려는 SQL 데이터베이스 -- 스키마와 데이터 모두.저는 가난해서 돈을 지불하고 싶지 않습니다.저는 또한 게으르기 때문에 많은 일을 하고 싶지 않습니다.현재 저는 이 테이블을 한 테이블씩 하고 있고, 해야 할 테이블이 100개 정도 있습니다.이것은 매우 지루합니다.

내가 원하는 대로 할 수 있는 속임수가 있을까요?

다음 Serverfault 페이지의 승인된 답변에서 유용한 정보를 찾을 수 있습니다. https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql-2005

데이터 없이 스키마를 변환할 수 있는 경우 다음 명령을 사용하여 데이터에 대한 단계를 단축할 수 있습니다.

pg_dump --data-only --column-inserts your_db_name > data_load_script.sql

, 이부는꽤만지느겠리하,만▁will▁this지▁the▁but느겠▁load.--column-inserts옵션은 각 데이터 행에 대해 가능한 가장 일반적인 INSERT 문을 생성하며 호환되어야 합니다.

편집: 스키마 변환에 대한 제안 사항은 다음과 같습니다.

먼저 스키마를 버리고 소유권이나 권한과 관련된 모든 것을 제거합니다.이 정도면 충분합니다.

pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql

이 파일을 편집하여 줄을 추가합니다.BEGIN TRANSACTION;부터 끝까지ROLLBACK TRANSACTION;Server의 할 수 .이제 이를 로드하고 SQL 서버의 쿼리 창에서 실행할 수 있습니다.오류가 발생하면 파일 하단으로 이동하여 ROLBACK 문을 강조 표시하고 실행합니다(문이 강조 표시된 상태에서 F5를 눌러).

기본적으로 스크립트가 정상적으로 실행될 때까지 각 오류를 해결해야 합니다.그러면 변경할 수 있습니다.ROLLBACK TRANSACTIONCOMMIT TRANSACTION마지막으로 한 번 실행합니다.

유감스럽게도, 저는 Postgre에서 간 적이 없기 때문에 당신이 볼 수 있는 오류는 어쩔 수 없습니다.SQL에서 SQL Server로, 그 반대입니다.그러나 문제가 될 것으로 예상되는 몇 가지 사항(분명히 전체 목록은 아님):

  • 은 Postgre를 증분 를 수행합니다.SQL은 다음을 연결하여 자동 증분 필드를 수행합니다.NOT NULL INTEGER에서 지드필에까지.SEQUENCE용사를 DEFAULTServer에서는 Server입니다.IDENTITY칼럼, 하지만 정확히 같은 것은 아닙니다.동일한 것인지는 모르겠지만 원래 스키마가 "id" 필드로 가득 찬 경우 문제가 발생할 수 있습니다.에 SQL Server가 있는지 CREATE SEQUENCE그래서 당신은 그것들을 제거해야 할지도 모릅니다.
  • 데이터베이스 기능 / 저장 프로시저는 RDBMS 플랫폼 간에 변환되지 않습니다.다음 중 하나를 제거해야 합니다.CREATE FUNCTION설명 및 알고리즘을 수동으로 변환할 수 있습니다.
  • 데이터 파일의 인코딩에 주의하십시오., .SQL.pg_dump선택권이 있습니다.--encoding=특정 인코딩을 설정할 수 있습니다.을 사용하는 이 있는 합니다. 여기서 PostgreWindows는 2바이트 UTF-16 인코딩을 합니다.SQL은 UTF-8을 사용합니다. SQL Server에서 Postgre로 이동하는 데 문제가 있었습니다.UTF-16 출력으로 인한 SQL이므로 조사해 볼 가치가 있을 것입니다.
  • Postgre더 유형 SQLTEXT 는단한순입니다.VARCHAR SQL Server에서TEXT복잡합니다. (그리고 더 이상 사용하지 않습니다.)에서 원래스다선으로 된 각 TEXT적절한 SQL Server 데이터 유형에 대한 검토가 필요합니다.
  • 에는 SQL Server에 대한 .UNICODE데이터입니다. 저는 제안을 하기에 충분히 익숙하지 않습니다.저는 단지 그것이 문제가 될 수도 있다는 것을 지적하는 것입니다.

저는 이것을 더 빠르고 쉽게 달성할 수 있는 방법을 찾았습니다.

먼저 테이블(또는 쿼리)을 다음과 같이 탭으로 구분된 파일에 복사합니다.

COPY (SELECT siteid, searchdist, listtype, list, sitename, county, street, 
   city, state, zip, georesult, elevation, lat, lng, wkt, unlocated_bool, 
   id, status, standard_status, date_opened_or_reported, date_closed, 
   notes, list_type_description FROM mlocal) TO 'c:\SQLAzureImportFiles\data_script_mlocal.tsv' NULL E''

다음에 SQL에서 테이블을 만들어야 합니다. 그러면 스키마가 처리되지 않습니다.스키마는 필드 순서 및 데이터 유형에서 내보낸 tsv 파일과 일치해야 합니다.

마지막으로 SQL의 bcp 유틸리티를 실행하여 다음과 같이 tsv 파일을 가져옵니다.

bcp MyDb.dbo.mlocal in "\\NEWDBSERVER\SQLAzureImportFiles\data_script_mlocal.tsv" -S tcp:YourDBServer.database.windows.net -U YourUserName -P YourPassword -c

제가 마주친 몇 가지 주목할 점들이 있습니다.Postgres와 SQL Server는 부울 필드를 다르게 처리합니다.SQL Server 스키마에서 부울 필드를 varchar(1)로 설정해야 하며 결과 데이터는 'f', 't' 또는 null이 됩니다.그런 다음 이 필드를 약간 변환해야 합니다. 다음과 같은 작업을 수행하십시오.

ALTER TABLE mlocal ADD unlocated bit;
UPDATE mlocal SET unlocated=1 WHERE unlocated_bool='t';
UPDATE mlocal SET unlocated=0 WHERE unlocated_bool='f';
ALTER TABLE mlocal DROP COLUMN unlocated_bool;

또 다른 점은 지리/기하학 분야가 두 플랫폼 간에 매우 다르다는 것입니다..ST_AsText(geo)SQL 서버에서 적절하게 변환할 수 있습니다.

이와 같은 수정이 필요한 비호환성이 더 있을 수 있습니다.

EDIT. 이 기술은 기술적으로 효과가 있지만, 저는 100개 이상의 테이블에서 SQL Azure로 수백만 개의 레코드를 전송하려고 합니다. bcp에서 SQL Azure로 전송하는 것은 꽤나 엉터리인 것으로 드러났습니다.간헐적으로 발생함 BCP 호스트 데이터 파일을 열 수 없음 오류, 서버가 간헐적으로 시간 초과되고 일부 레코드가 오류 또는 문제의 징후 없이 전송되지 않습니다.따라서 이 기법은 Azure SQL로 대량의 데이터를 전송할 때 안정적이지 않습니다.

Navicate는 Postgres 및 SQL Server를 포함한 다양한 데이터베이스 작업에 강력한 GUI 도구를 사용할 수 있습니다.다음과 같이 스키마와 데이터를 모두 쉽게 전송할 수 있습니다.

  1. 원본 및 대상 데이터베이스에 대한 두 개의 연결 만들기

enter image description here

  1. 도구로 이동 -> 데이터 전송

IP, 데이터베이스 이름 및 스키마를 사용하여 원본 데이터베이스 및 대상 데이터베이스 선택

옵션에서 볼 수 있듯이, 대상 테이블이 존재하지 않으면 생성됩니다.

Tada, 내 63개 테이블 전체와 테이블 데이터를 Postgres에서 SQL Server로 전송하는 데 10분이 걸립니다.

맛있게 드세요!

언급URL : https://stackoverflow.com/questions/6563846/how-to-migrate-a-postgresql-database-into-a-sqlserver-one

반응형