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 keSEQUENCE
menggunakanDEFAULT
. Di SQL Server, ini adalahIDENTITY
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 memilikiCREATE 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 sebuahVARCHAR
tanpa panjang maksimal. Di SQL Server,TEXT
adalah... rumit (dan tidak digunakan lagi). Setiap bidang dalam skema asli Anda yang dideklarasikan sebagaiTEXT
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.