U zou wat nuttige informatie moeten kunnen vinden in het geaccepteerde antwoord op deze Serverfault-pagina:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.
Als u het schema kunt laten converteren zonder de gegevens, kunt u de stappen voor de gegevens mogelijk verkorten met deze opdracht:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
Dit laden zal vrij langzaam zijn, maar de --column-inserts optie genereert de meest generieke INSERT-instructies die mogelijk zijn voor elke rij met gegevens en zou compatibel moeten zijn.
EDIT:Suggesties voor het converteren van het schema volgen:
Ik zou beginnen met het dumpen van het schema, maar alles verwijderen dat te maken heeft met eigendom of machtigingen. Dit zou genoeg moeten zijn:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
Bewerk dit bestand om de regel BEGIN TRANSACTION; . toe te voegen naar het begin en ROLLBACK TRANSACTION; naar het einde. Nu kunt u het laden en uitvoeren in een queryvenster in SQL Server. Als u fouten krijgt, ga dan naar de onderkant van het bestand, markeer de ROLLBACK-instructie en voer deze uit (door op F5 te drukken terwijl de instructie is gemarkeerd).
Kortom, u moet elke fout oplossen totdat het script netjes is uitgevoerd. Dan kunt u de ROLLBACK TRANSACTION . wijzigen om COMMIT TRANSACTION en ren nog een laatste keer.
Helaas kan ik niet helpen met welke fouten je kunt zien, aangezien ik nooit van PostgreSQL naar SQL Server ben gegaan, alleen andersom. Sommige dingen waarvan ik zou verwachten dat ze een probleem zouden zijn (uiteraard GEEN uitputtende lijst):
- PostgreSQL verhoogt automatisch velden door een
NOT NULL INTEGERte koppelen veld naar eenSEQUENCEmet behulp van eenDEFAULT. In SQL Server is dit eenIDENTITYkolom, maar ze zijn niet precies hetzelfde. Ik weet niet zeker of ze gelijkwaardig zijn, maar als je oorspronkelijke schema vol is met "id"-velden, kun je problemen krijgen. Ik weet niet of SQL ServerCREATE SEQUENCEheeft , dus het kan zijn dat u deze moet verwijderen. - Databasefuncties/opgeslagen procedures vertalen niet tussen RDBMS-platforms. Je moet alle
CREATE FUNCTION. verwijderen instructies en vertaal de algoritmen handmatig. - Wees voorzichtig met het coderen van het gegevensbestand. Ik ben een Linux-persoon, dus ik heb geen idee hoe ik de codering in Windows moet verifiëren, maar je moet ervoor zorgen dat wat SQL Server verwacht hetzelfde is als het bestand dat je importeert uit PostgreSQL.
pg_dumpheeft een optie--encoding=waarmee u een specifieke codering kunt instellen. Ik meen me te herinneren dat Windows de neiging heeft om UTF-16-codering van twee bytes voor Unicode te gebruiken, terwijl PostgreSQL UTF-8 gebruikt. Ik had een probleem om van SQL Server naar PostgreSQL te gaan vanwege de UTF-16-uitvoer, dus het zou het onderzoeken waard zijn. - Het PostgreSQL-gegevenstype
TEXTis gewoon eenVARCHARzonder maximale lengte. In SQL Server,TEXTis... ingewikkeld (en verouderd). Elk veld in uw oorspronkelijke schema dat is gedeclareerd alsTEXTmoet worden gecontroleerd op een geschikt SQL Server-gegevenstype. - SQL Server heeft extra datatypes voor
UNICODEgegevens. Ik ben er niet bekend genoeg mee om suggesties te doen. Ik wijs er alleen op dat het een probleem kan zijn.