Du burde være i stand til at finde nogle nyttige oplysninger i det accepterede svar på denne Serverfault-side:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.
Hvis du kan få skemaet konverteret uden dataene, kan du muligvis forkorte trinene for dataene ved at bruge denne kommando:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
Denne indlæsning vil være ret langsom, men --column-inserts
option genererer de mest mulige generiske INSERT-sætninger for hver række data og bør være kompatible.
EDIT:Forslag til konvertering af skemaet følger:
Jeg ville starte med at dumpe skemaet, men fjerne alt, der har med ejerskab eller tilladelser at gøre. Dette burde være nok:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
Rediger denne fil for at tilføje linjen BEGIN TRANSACTION;
til begyndelsen og ROLLBACK TRANSACTION;
til slutningen. Nu kan du indlæse den og køre den i et forespørgselsvindue i SQL Server. Hvis du får nogen fejl, skal du sørge for at gå til bunden af filen, fremhæve ROLLBACK-sætningen og køre den (ved at trykke på F5, mens sætningen er fremhævet).
Dybest set skal du løse hver fejl, indtil scriptet kører rent igennem. Derefter kan du ændre ROLLBACK TRANSACTION
til COMMIT TRANSACTION
og kør en sidste gang.
Jeg kan desværre ikke hjælpe med hvilke fejl du kan se, da jeg aldrig er gået fra PostgreSQL til SQL Server, kun omvendt. Nogle ting, som jeg dog ville forvente var et problem (selvfølgelig IKKE en udtømmende liste):
- PostgreSQL øger automatisk felter ved at linke et
NOT NULL INTEGER
felt til enSEQUENCE
ved hjælp af enDEFAULT
. I SQL Server er dette enIDENTITY
kolonne, men de er ikke helt det samme. Jeg er ikke sikker på, om de er ækvivalente, men hvis dit originale skema er fyldt med "id"-felter, kan du få nogle problemer. Jeg ved ikke, om SQL Server harCREATE SEQUENCE
, så du skal muligvis fjerne dem. - Databasefunktioner/lagrede procedurer oversættes ikke mellem RDBMS-platforme. Du skal fjerne enhver
CREATE FUNCTION
udsagn og oversæt algoritmerne manuelt. - Vær forsigtig med kodningen af datafilen. Jeg er en Linux-person, så jeg aner ikke, hvordan man verificerer kodning i Windows, men du skal sikre dig, at det, SQL Server forventer, er det samme som den fil, du importerer fra PostgreSQL.
pg_dump
har en mulighed--encoding=
som vil lade dig indstille en specifik kodning. Jeg synes at huske, at Windows har en tendens til at bruge to-byte, UTF-16-kodning til Unicode, hvor PostgreSQL bruger UTF-8. Jeg havde et problem med at gå fra SQL Server til PostgreSQL på grund af UTF-16 output, så det ville være værd at undersøge. - PostgreSQL-datatypen
TEXT
er simpelthen enVARCHAR
uden max længde. I SQL Server,TEXT
er ... kompliceret (og forældet). Hvert felt i dit originale skema, der er erklæret somTEXT
skal gennemgås for en passende SQL Server-datatype. - SQL-serveren har ekstra datatyper til
UNICODE
data. Jeg er ikke bekendt nok med det til at komme med forslag. Jeg påpeger bare, at det kan være et problem.