Dovresti essere in grado di trovare alcune informazioni utili nella risposta accettata in questa pagina Serverfault:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.
Se riesci a convertire lo schema senza i dati, potresti essere in grado di abbreviare i passaggi per i dati usando questo comando:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
Questo caricamento sarà piuttosto lento, ma il --column-inserts
L'opzione genera le istruzioni INSERT più generiche possibili per ogni riga di dati e dovrebbe essere compatibile.
EDIT:Di seguito sono riportati i suggerimenti per la conversione dello schema:
Inizierei scaricando lo schema, ma rimuovendo tutto ciò che ha a che fare con la proprietà o le autorizzazioni. Questo dovrebbe bastare:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
Modifica questo file per aggiungere la riga BEGIN TRANSACTION;
all'inizio e ROLLBACK TRANSACTION;
all'estremità. Ora puoi caricarlo ed eseguirlo in una finestra di query in SQL Server. In caso di errori, assicurati di andare in fondo al file, evidenziare l'istruzione ROLLBACK ed eseguirla (premendo F5 mentre l'istruzione è evidenziata).
Fondamentalmente, devi risolvere ogni errore fino a quando lo script non viene eseguito in modo pulito. Quindi puoi modificare la ROLLBACK TRANSACTION
a COMMIT TRANSACTION
ed esegui un'ultima volta.
Sfortunatamente, non posso aiutarti con quali errori potresti vedere perché non sono mai passato da PostgreSQL a SQL Server, solo il contrario. Alcune cose che mi aspetterei essere un problema, tuttavia (ovviamente, NON un elenco esaustivo):
- PostgreSQL incrementa automaticamente i campi collegando un
NOT NULL INTEGER
campo in unaSEQUENCE
utilizzando unDEFAULT
. In SQL Server, questo è unIDENTITY
colonna, ma non sono esattamente la stessa cosa. Non sono sicuro che siano equivalenti, ma se il tuo schema originale è pieno di campi "id", potresti avere qualche problema. Non so se SQL Server haCREATE SEQUENCE
, quindi potresti doverli rimuovere. - Le funzioni del database/le stored procedure non vengono tradotte tra le piattaforme RDBMS. Dovrai rimuovere qualsiasi
CREATE FUNCTION
dichiarazioni e tradurre gli algoritmi manualmente. - Fai attenzione alla codifica del file di dati. Sono una persona Linux, quindi non ho idea di come verificare la codifica in Windows, ma devi assicurarti che ciò che SQL Server si aspetta sia lo stesso del file che stai importando da PostgreSQL.
pg_dump
ha un'opzione--encoding=
che ti consentirà di impostare una codifica specifica. Mi sembra di ricordare che Windows tende a utilizzare la codifica UTF-16 a due byte per Unicode in cui PostgreSQL utilizza UTF-8. Ho avuto qualche problema con il passaggio da SQL Server a PostgreSQL a causa dell'output UTF-16, quindi varrebbe la pena fare una ricerca. - Il tipo di dati PostgreSQL
TEXT
è semplicemente unVARCHAR
senza una lunghezza massima. In SQL Server,TEXT
è... complicato (e deprecato). Ogni campo nello schema originale dichiarato comeTEXT
sarà necessario esaminare un tipo di dati SQL Server appropriato. - SQL Server dispone di tipi di dati aggiuntivi per
UNICODE
dati. Non lo conosco abbastanza per dare suggerimenti. Sto solo sottolineando che potrebbe essere un problema.