PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да мигрирам PostgreSQL база данни в SQLServer?

Трябва да можете да намерите полезна информация в приетия отговор на тази страница с грешки в сървъра:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005 г.

Ако можете да конвертирате схемата без данните, може да сте в състояние да съкратите стъпките за данните, като използвате тази команда:

pg_dump --data-only --column-inserts your_db_name > data_load_script.sql

Това натоварване ще бъде доста бавно, но --column-inserts опцията генерира възможно най-общите изрази INSERT за всеки ред данни и трябва да е съвместима.

РЕДАКТИРАНЕ:Предложенията за конвертиране на схемата са следните:

Бих започнал с изхвърляне на схемата, но премахване на всичко, което има отношение към собствеността или разрешенията. Това трябва да е достатъчно:

pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql

Редактирайте този файл, за да добавите реда BEGIN TRANSACTION; до началото и ROLLBACK TRANSACTION; до края. Сега можете да го заредите и стартирате в прозорец за заявка в SQL Server. Ако получите някакви грешки, уверете се, че отивате в края на файла, маркирайте оператора ROLLBACK и го стартирайте (като натиснете F5, докато операторът е маркиран).

По принцип трябва да разрешите всяка грешка, докато скриптът се изпълни чисто. След това можете да промените ROLLBACK TRANSACTION до COMMIT TRANSACTION и стартирайте за последен път.

За съжаление не мога да помогна с кои грешки може да видите, тъй като никога не съм минавал от PostgreSQL към SQL Server, само обратното. Някои неща, които бих очаквал да бъдат проблем, обаче (очевидно НЕ е изчерпателен списък):

  • PostgreSQL прави автоматично увеличение на полетата чрез свързване на NOT NULL INTEGER поле към SEQUENCE използвайки DEFAULT . В SQL Server това е IDENTITY колона, но те не са точно едно и също нещо. Не съм сигурен дали са еквивалентни, но ако оригиналната ви схема е пълна с полета "id", може да имате проблеми. Не знам дали SQL Server има CREATE SEQUENCE , така че може да се наложи да ги премахнете.
  • Функциите на базата данни / Съхранените процедури не се превеждат между RDBMS платформи. Ще трябва да премахнете всяка CREATE FUNCTION изрази и ръчно преведете алгоритмите.
  • Внимавайте с кодирането на файла с данни. Аз съм човек на Linux, така че нямам представа как да проверя кодирането в Windows, но трябва да се уверите, че това, което SQL Server очаква, е същото като файла, който импортирате от PostgreSQL. pg_dump има опция --encoding= което ще ви позволи да зададете конкретно кодиране. Изглежда си спомням, че Windows има тенденция да използва двубайтово UTF-16 кодиране за Unicode, където PostgreSQL използва UTF-8. Имах проблем с преминаването от SQL Server към PostgreSQL поради изхода на UTF-16, така че би си струвало да проуча.
  • Типът данни на PostgreSQL TEXT е просто VARCHAR без максимална дължина. В SQL Server, TEXT е... сложен (и отхвърлен). Всяко поле в оригиналната ви схема, което е декларирано като TEXT ще трябва да бъде прегледан за подходящ тип данни на SQL Server.
  • SQL Server има допълнителни типове данни за UNICODE данни. Не съм достатъчно запознат с него, за да правя предложения. Просто посочвам, че може да е проблем.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Оптимизирайте заявката с OFFSET върху голяма таблица

  2. Заявката за избор с ограничение за отместване е твърде бавна

  3. Liquibase/PostgreSQL:как да запазим правилно регистъра на таблицата?

  4. персонализирайте пейджър в psql

  5. Защо PostgreSQL обедини потребители и групи в роли?