PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara memigrasi database PostgreSQL ke SQLServer?

Anda harus dapat menemukan beberapa informasi berguna dalam jawaban yang diterima di halaman Serverfault ini:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.

Jika Anda bisa mendapatkan skema yang dikonversi tanpa data, Anda mungkin dapat mempersingkat langkah-langkah untuk data dengan menggunakan perintah ini:

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

Pemuatan ini akan sangat lambat, tetapi --column-inserts opsi menghasilkan pernyataan INSERT yang paling umum untuk setiap baris data dan harus kompatibel.

EDIT:Saran untuk mengonversi skema berikut:

Saya akan mulai dengan membuang skema, tetapi menghapus apa pun yang berkaitan dengan kepemilikan atau izin. Ini sudah cukup:

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

Edit file ini untuk menambahkan baris BEGIN TRANSACTION; ke awal dan ROLLBACK TRANSACTION; sampai akhir. Sekarang Anda dapat memuatnya dan menjalankannya di jendela kueri di SQL Server. Jika Anda mendapatkan kesalahan, pastikan Anda pergi ke bagian bawah file, sorot pernyataan ROLLBACK dan jalankan (dengan menekan F5 saat pernyataan disorot).

Pada dasarnya, Anda harus menyelesaikan setiap kesalahan hingga skrip berjalan dengan bersih. Kemudian Anda dapat mengubah ROLLBACK TRANSACTION ke COMMIT TRANSACTION dan jalankan untuk terakhir kalinya.

Sayangnya, saya tidak dapat membantu dengan kesalahan mana yang mungkin Anda lihat karena saya tidak pernah beralih dari PostgreSQL ke SQL Server, hanya sebaliknya. Namun, beberapa hal yang saya harapkan menjadi masalah (jelas, BUKAN daftar yang lengkap):

  • PostgreSQL melakukan penambahan bidang secara otomatis dengan menautkan NOT NULL INTEGER bidang ke SEQUENCE menggunakan DEFAULT . Di SQL Server, ini adalah IDENTITY kolom, tapi mereka tidak persis sama. Saya tidak yakin apakah keduanya setara, tetapi jika skema asli Anda penuh dengan bidang "id", Anda mungkin mengalami masalah. Saya tidak tahu apakah SQL Server memiliki CREATE SEQUENCE , jadi Anda mungkin harus menghapusnya.
  • Fungsi basis data / Prosedur Tersimpan tidak menerjemahkan antar platform RDBMS. Anda harus menghapus CREATE FUNCTION pernyataan dan terjemahkan algoritme secara manual.
  • Hati-hati dengan pengkodean file data. Saya orang Linux, jadi saya tidak tahu cara memverifikasi pengkodean di Windows, tetapi Anda perlu memastikan bahwa apa yang diharapkan SQL Server sama dengan file yang Anda impor dari PostgreSQL. pg_dump memiliki opsi --encoding= yang akan memungkinkan Anda mengatur pengkodean tertentu. Sepertinya saya ingat bahwa Windows cenderung menggunakan pengkodean UTF-16 dua byte untuk Unicode di mana PostgreSQL menggunakan UTF-8. Saya mengalami beberapa masalah saat beralih dari SQL Server ke PostgreSQL karena keluaran UTF-16 sehingga perlu diteliti.
  • Tipe data PostgreSQL TEXT hanyalah sebuah VARCHAR tanpa panjang maksimal. Di SQL Server, TEXT adalah... rumit (dan tidak digunakan lagi). Setiap bidang dalam skema asli Anda yang dideklarasikan sebagai TEXT perlu ditinjau untuk tipe data SQL Server yang sesuai.
  • SQL Server memiliki tipe data tambahan untuk UNICODE data. Saya tidak cukup akrab dengannya untuk membuat saran. Saya hanya menunjukkan bahwa itu mungkin menjadi masalah.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ikhtisar Metode GABUNG di PostgreSQL

  2. Cara mendeklarasikan variabel dalam kueri PostgreSQL

  3. Bagaimana make_timestamptz() Bekerja di PostgreSQL

  4. Cara diam menginstal Postgresql di Ubuntu melalui. file docker?

  5. Permintaan untuk elemen array di kolom JSON