PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come migrare un database PostgreSQL in uno SQLServer?

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 una SEQUENCE utilizzando un DEFAULT . In SQL Server, questo è un IDENTITY 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 ha CREATE 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 un VARCHAR senza una lunghezza massima. In SQL Server, TEXT è... complicato (e deprecato). Ogni campo nello schema originale dichiarato come TEXT 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.