Alat terbaik untuk memigrasi database PostgreSQL ke MS SQL 2005?

8

Saya memiliki database di PostgreSQL 8.3.1 yang ingin saya migrasi ke MS SQL Server 2005 (atau mungkin 2008), termasuk skema tabel dan data. Basis data berukuran sekitar 50GB dengan sekitar 400.000.000 baris, jadi saya pikir pernyataan INSERT sederhana tidak mungkin. Adakah yang bisa merekomendasikan alat terbaik untuk melakukan migrasi ini? Jelas itu harus dapat diandalkan, sehingga data persis sama di DB target seperti di sumber satu dan harus dapat menyalin volume data ini dalam waktu yang wajar.

EMP
sumber
4
hanya ingin tahu: mengapa Anda ingin melakukan ini?
wzzrd
Saya kira Anda pindah ke server Windows untuk beberapa alasan selain sekadar fungsi db? Saya harap :)
warren

Jawaban:

6

Saya akhirnya tidak menggunakan alat pihak ketiga untuk data karena tidak ada yang saya coba bekerja untuk tabel besar. Bahkan SSIS gagal. Saya memang menggunakan alat komersial untuk skema tersebut. Jadi proses konversi saya adalah sebagai berikut:

  1. Perusahaan Konversi Penuh untuk menyalin skema (tidak ada data).
  2. pg_dump untuk mengekspor data dari Postgres dalam format "teks biasa", yang pada dasarnya adalah file tab-separated values ​​(TSV).
  3. Skrip python untuk mengubah file yang diekspor ke format bcp akan mengerti.
  4. bcp untuk mengimpor data ke MSSQL.

Langkah transformasi menangani beberapa perbedaan dalam format yang digunakan oleh pg_dump dan bcp, seperti:

  • pg_dump menempatkan beberapa hal spesifik Postgres di awal file dan mengakhiri data dengan ".", sementara bcp mengharapkan seluruh file berisi data
  • pg_dump menyimpan nilai NULL sebagai "\ N", sementara bcp mengharapkan tidak ada yang menggantikan NULL (mis. tidak ada data di antara pemisah kolom)
  • pg_dump mengkodekan tab sebagai "\ t" dan baris baru sebagai "\ n", sementara bcp memperlakukannya secara harfiah
  • pg_dump selalu menggunakan tab dan baris baru sebagai pemisah, sementara bcp memungkinkan pengguna untuk menentukan pemisah. Ini menjadi perlu jika data berisi tab atau baris baru, karena tidak dikodekan.

Saya juga menemukan bahwa beberapa kendala unik yang baik-baik saja di Postgres dilanggar di MSSQL, jadi saya harus membuangnya. Ini karena NULL = NULL dalam MSSQL (mis. NULL diperlakukan sebagai nilai unik), tetapi tidak dalam Postgres.

EMP
sumber
Itu adalah SQL-Server quirk. Alih-alih kendala yang unik, Anda perlu mengatur INDEX unik yang difilter (WHERE nama_ kolom TIDAK NULL).
Quandary
Anda membawakan saya alat yang saya yakinkan untuk dibeli bos saya. #FullConvert
mugume david
6

Jika Anda memiliki driver dukungan Postgres yang sesuai diinstal pada kotak SQL 2005 Anda (atau ingin menggunakan Postgres melalui ODBC, atau ingin membuang data dari Postgres ke file dan impor dari itu) Anda dapat menggunakan wizard impor / ekspor di SQL Server di untuk menyalin data. Ini akan menanyakan berbagai pertanyaan dan kemudian menjalankan impor sebagai pekerjaan paket Layanan Integrasi Server SQL (SSIS), menggunakan operasi batch insert yang sesuai.

Namun jika wizard itu bukan opsi, perlu dipertimbangkan bahwa meskipun Anda memiliki banyak baris, ukuran individual rata-rata <135 byte, dan diberi ruang log transaksi yang cukup untuk memungkinkan transaksi 50 GB terjadi ' pernyataan sederhana 'tidak dengan sendirinya keluar dari pertanyaan.

Steve Gray
sumber
1
Lihatlah menggunakan BCP (ini adalah utilitas yang datang dengan SQL server), jika Anda akhirnya mengekspor data dan kemudian mengimpor ke SQL Server. Menggunakan SSIS adalah ide yang baik jika Anda hanya ingin mendapatkannya langsung dari server PG, tetapi mungkin memberi Anda masalah log.
ColtonCat
Paket SSIS terdengar sangat menjanjikan dan saya mencobanya, tetapi sayangnya itu kehabisan memori dan gagal. :( ERROR [HY000] Kehabisan memori saat membaca tuple.; Kesalahan saat menjalankan kueri (PSQLODBC35W.DLL)
EMP
0

http://www.easyfrom.net/

Ini dia :) Sayangnya, ini sedikit mahal.

David Rickman
sumber
Terima kasih, mencobanya, tetapi mengalami beberapa kesalahan dengan tabel besar.
EMP
0

Hampir 10 tahun berlalu, dan ini masih bukan masalah langsung. Saya berakhir dengan solusi hybrid, saya menggulung mapper skema saya sendiri dengan mengekspor skema dan komentar tabel / kolom menggunakan perintah berikut:

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

Saya kemudian menulis skrip PHP yang menerjemahkan skema ke T-SQL. Saya kemudian, menggunakan perangkat lunak pihak ke-3 berikut untuk melakukan impor baris yang sebenarnya (tidak ada afiliasi):

http://www.convert-in.com/pgs2mss.htm

Agak lambat, tapi sejauh ini bagus. Basis data kami lebih kecil dari milik Anda, hanya 15GB, tetapi alat itu tampaknya menanganinya dengan baik. Itu juga yang termurah yang bisa saya temukan sekitar $ 50. Sejauh ini sudah layak investasi sementara.

dearsina
sumber