Měli byste být schopni najít nějaké užitečné informace v přijaté odpovědi na této stránce Serverfault:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.
Pokud můžete schéma převést bez dat, možná budete moci zkrátit kroky pro data pomocí tohoto příkazu:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
Toto načítání bude poměrně pomalé, ale --column-inserts
volba generuje nejobecnější možné příkazy INSERT pro každý řádek dat a měla by být kompatibilní.
EDIT:Následují návrhy na převod schématu:
Začal bych vypuštěním schématu, ale odstraněním všeho, co souvisí s vlastnictvím nebo oprávněními. To by mělo stačit:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
Upravte tento soubor a přidejte řádek BEGIN TRANSACTION;
na začátek a ROLLBACK TRANSACTION;
do konce. Nyní jej můžete načíst a spustit v okně dotazu na SQL Server. Pokud se objeví nějaké chyby, ujistěte se, že jste přešli na konec souboru, zvýrazněte příkaz ROLLBACK a spusťte jej (stisknutím F5, když je příkaz zvýrazněn).
V podstatě musíte vyřešit každou chybu, dokud skript neproběhne čistě. Poté můžete změnit ROLLBACK TRANSACTION
k COMMIT TRANSACTION
a spustit ještě jednou.
Bohužel nemohu pomoci s chybami, které můžete vidět, protože jsem nikdy nepřešel z PostgreSQL na SQL Server, pouze naopak. Některé věci, u kterých bych očekával, že budou problémem (samozřejmě NE vyčerpávajícím seznamem):
- PostgreSQL automaticky zvyšuje pole propojením
NOT NULL INTEGER
pole naSEQUENCE
pomocíDEFAULT
. V SQL Server je toIDENTITY
sloupec, ale nejsou to úplně stejné věci. Nejsem si jistý, zda jsou ekvivalentní, ale pokud je vaše původní schéma plné polí "id", můžete mít potíže. Nevím, jestli má SQL ServerCREATE SEQUENCE
, takže je možná budete muset odstranit. - Funkce databáze / uložené procedury se mezi platformami RDBMS nepřekládají. Budete muset odstranit všechny
CREATE FUNCTION
a překládat algoritmy ručně. - Při kódování datového souboru buďte opatrní. Jsem Linuxák, takže nemám ponětí, jak ověřit kódování ve Windows, ale musíte se ujistit, že to, co SQL Server očekává, je stejné jako soubor, který importujete z PostgreSQL.
pg_dump
má volbu--encoding=
to vám umožní nastavit konkrétní kódování. Zdá se mi, že si vzpomínám, že Windows má tendenci používat dvoubajtové kódování UTF-16 pro Unicode, kde PostgreSQL používá UTF-8. Měl jsem problém s přechodem ze serveru SQL Server na PostgreSQL kvůli výstupu UTF-16, takže by to stálo za prozkoumání. - Datový typ PostgreSQL
TEXT
je jednodušeVARCHAR
bez maximální délky. V SQL ServerTEXT
je... komplikovaný (a zastaralý). Každé pole ve vašem původním schématu, které je deklarováno jakoTEXT
bude nutné zkontrolovat vhodný datový typ serveru SQL. - SQL Server má další datové typy pro
UNICODE
data. Nejsem v tom dostatečně obeznámen, abych mohl navrhovat. Jen upozorňuji, že to může být problém.