sql >> Databáze >  >> RDS >> PostgreSQL

Jak migrovat PostgreSQL databázi na SQLServer?

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 na SEQUENCE pomocí DEFAULT . V SQL Server je to IDENTITY 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 Server CREATE 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še VARCHAR bez maximální délky. V SQL Server TEXT je... komplikovaný (a zastaralý). Každé pole ve vašem původním schématu, které je deklarováno jako TEXT 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.


  1. Alternativy MySQL Workbench - Správa uživatelů databáze ClusterControl

  2. Jak RPAD() funguje v MariaDB

  3. Příklady TIMESTAMPDIFF() – MySQL

  4. Vypočítat věk v MySQL (InnoDb)