Цей розділ описує експортування групи таблиць з бази даних PostgreSQL до бази даних Microsoft SQL Server в Database Tour.
Підготовка до експортування
Це не обов'язково, але рекомендується зареєструвати і вихідну, і цільову бази даних перед тим, як ви почнете налаштовувати ваш процес експорту.
Для обох баз даних рекомендується використовувати інтерфейс FD.
Обидві бази даних повинні підтримувати однакову архітектуру: 32-bit або 64-bit. Тобто обидві бази даних повинні успішно відкриватися однією копією (instance) Database Tour.
Зауваження: На наших веб-сайтах є обидві версії Database Tour: 32-bit та 64-bit. Будь-ласка, перевіряйте, яку саме версію ви завантажуєте. Якщо ваша операційна система 64-бітна, ви можете встановити як Database Tour 32-bit, так і Database Tour 64-bit і використовувати їх незалежно.
Кроки експорту
- Відкрийте вихідну базу даних.
- Ви можете експортувати вибрані таблиці або відкриті набори даних будь-якого виду.
- Експортування вибраних таблиць
- Перейдіть до закладки Таблиці ліворуч.
- Клікніть список таблиць правою кнопкою і виберіть Множинний вибір.
- Виберіть таблиці для експорту.
- Клікніть кнопку Експорт або виберіть меню Інструменти | Експорт даних | Вибрані таблиці....
- Експортування відкритих наборів даних (можна використовувати результати запитів SQL або мікс запитів та таблиць)
- Відкрийте кілька вікон SQL, впишіть туди тексти потрібних запитів SQL та виконайте їх для отримання даних. Відкрийте також потрібні таблиці і перейдіть на закладку Дані.
- Виберіть меню Інструменти | Експорт даних | Відкриті набори даних....
- Виберіть набори даних для експорту та клікніть OK.
- Експортування вибраних таблиць
- Перейдіть до закладки База даних, виберіть вашу зареєстровану цільову базу даних та вкажіть параметри експорту. Майте на увазі наступне:
- Увімкніть опцію Режим економії пам'яті і пов'язані з нею опції. В разі проблем при експорті, якщо є підозра, що вони викликані цими опціями, спробуйте іншу їх комбінацію. Якщо вихідні дані та/або назви колонок джерела або цілі можуть містити символи Unicode, переконайтеся, що вибрали коректне кодування потоку SQL, наприклад, UTF-8.
- Виберіть Режим експорту, який слід застосувати для більшості таблиць. Ви зможете при потребі перевизначити його на наступному етапі для певних таблиць. Тобто, наприклад, для більшості таблиць це може бути Replace+Insert, для деяких - Update, ще інших - Delete і т.д.
- Залиште поле для цільової таблиці пустим, інакше дані будуть експортуватися до однієї таблиці.
- Чим більше значення Commit-інтервалу, тим швидше експортуватимуться дані. Проте занадто великі значення можуть викликати помилки роботи з оперативною пам'яттю та інші проблеми. Тому спробуйте погратися з цим параметром для знаходження оптимального значення перед портуванням рішення до продуктивного середовища.
- Клікніть Далі і вкажіть відповідності таблиць джерело-ціль, тобто відповідності між вихідними наборами даних та цільовими таблицями.
Тут можна вказати повні специфікації колонок для цільових таблиць, а також перевизначити Режим експорту для певних таблиць (якщо вам потрібен різний режим експорту для різних таблиць).
PostgreSQL і SQL Server підтримують описи (коментарі) таблиць та колонок, і ви їх також можете вказати тут; використовуйте макрос <copy_from_source>, щоб змусити програму копіювати описи з вихідних таблиць (якщо є) до цільових. Майте на увазі, що описи застосовуються лише під час створення таблиць і ігноруються, якщо режим експорту вказує лише додавання, оновлення або вилучення записів в існуючій таблиці.
Ви можете пропустити цей крок, клікнувши Експорт замість Далі, тоді відповідності вибудуються неявним чином згідно з правилами іменування в цільовій базі даних та вибраними опціями.
- Клікніть Експорт, щоб розпочати процедуру експорту. Ви можете перервати цю процедуру, натиснувши клавішу ESC або клікнувши Відмінити в додатковому віконці, що показується під час експорту.
У випадку проблем з продуктивністю: Спробуйте різні комбінації опцій Збереження пам'яті та Commit-інтервал; для великих таблиць використовуйте ці рекомендації.
Міграція даних з командного рядка
Зауваження
- Базовий командний рядок можна згенерувати автоматично, вибравши меню Інструменти | Генерація командного рядка | Експорт / Імпорт даних....
- Базовий командний рядок та приклад нижче можуть бути покращені додаванням інших ключів та параметрів командного рядка відповідно до документації.
- Приклад нижче може бути трансформований у файл операцій, з яким працювати комфортніше.
Командний рядок для експорту групи таблиць з PostgreSQL до SQL Server може виглядати так:
dbtour.exe /silent /export /ExportType=DATABASE /ExportMode=REPLACE+INSERT /CommitInterval=200 /SrcDBInterface=FD /SrcDBKind=DSN /SrcDBDriver=POSTGRESQL /SrcServer=MyPostresDbServer.com /SrcPort=5432 /SrcDB=clients "/SrcVendorLibrary=C:\Program Files (x86)\PostgreSQL\10\bin\libpq.dll" /SrcDBUserName=stage /SrcDBPassword=stage_password /TrgDBInterface=FD /TrgDBKind=DSN "/TrgDBDriver=SQL SERVER" /TrgServer=127.0.0.1\SQLEXPRESS /TrgDB=prod /TrgDBUserName=sa /TrgDBPassword=sa_password /TableMappingsFile=c:\DWH\Export\TableMappings.xml /MemorySaving /UseSQLParameters /UseBatchMode /Encoding=UTF-8 /LogFile=C:\DWH\Log\export_req.log /AppendLog
Опис використаних параметрів командного рядка:
/silent
Вказує програмі виконати операції в тихому режимі, тобто без жодних вікон.
/export
Вказує програмі виконати операцію експорту.
/ExportType=DATABASE
Вказує, що дані будуть експортуватися до бази даних.
/ExportMode=REPLACE+INSERT
Вказує, що цільові таблиці будуть створені (або замінені, якщо вже існують), і вихідні дані будуть вставлені в новоутворені таблиці.
/CommitInterval=200
Вказує програмі виконувати операцію Commit після експорту кожних 200 записів.
/SrcDBInterface=FD
Інтерфейс відкриття вихідної бази даних - FD.
/SrcDBKind=DSN
Вид вихідної бази даних - база даних широкого призначення.
/SrcDBDriver=POSTGRESQL
Драйвер (тип) вихідної бази даних - PostgreSQL.
/SrcServer=MyPostresDbServer.com
Вказує назву або IP-адресу сервера вихідної бази даних.
/SrcPort=5432
Вказує порт вихідної бази даних.
/SrcDB=clients
Вказує назву вихідної бази даних.
/SrcVendorLibrary=C:\Program Files (x86)\PostgreSQL\10\bin\libpq.dll
Вказує бібліотеку вендора для вихідної бази даних.
/SrcDBUserName=stage
Вказує ім'я користувача для вихідної бази даних.
/SrcDBPassword=stage_password
Вказує пароль користувача для вихідної бази даних.
/TrgDBInterface=FD
Інтерфейс відкриття цільової бази даних - FD.
/SrcDBKind=DSN
Вказує вид цільової бази даних - база даних широкого призначення.
/SrcDBDriver=SQL SERVER
Вказує драйвер (тип) цільової бази даних - Microsoft SQL Server.
/TrgServer=127.0.0.1\SQLEXPRESS
Вказує назву або IP-адресу сервера цільової бази даних.
/TrgDB=prod
Вказує назву цільової бази даних.
/TrgDBUserName=sa
Вказує ім'я користувача для цільової бази даних.
/TrgDBPassword=sa_password
Вказує пароль користувача для цільової бази даних.
/TableMappingsFile=c:\DWH\Export\TableMappings.xml
Вказує файл з відповідностями таблиць. Відповідності таблиць містять список відповідностей, де кожній вихідній таблиці відповідає певна цільова таблиця. Див. приклад файлу відповідностей таблиць нижче.
/MemorySaving
Вказує програмі використовувати режим економії пам'яті.
/UseSQLParameters
Вказує програмі використовувати параметри SQL для режиму економії пам'яті.
/UseBatchMode
Вказує програмі використовувати пакетний режим для режиму економії пам'яті.
/encoding=UTF-8
Вказує кодування потоку SQL для режиму економії пам'яті.
/LogFile=C:\DWH\Log\export_req.log
Вказує файл журналу.
/AppendLog
Якщо файл журналу не пустий, поточний журнал буде доданий в кінець файлу, а попередні журнали будуть збережені.
Приклад файлу відповідностей таблиць для експорту з PostgreSQL до SQL Server
Файл відповідностей таблиць містить відповідності між назвами вихідних та цільових таблиць. Опціонально кожна пара таблиць може включати вкладені відповідності колонок, тобто відповідності між колонками таблиці-джерела та цільової таблиці. Наступний приклад містить відповідності для трьох пар таблиць. Кожна з них містить вкладені відповідності колонок. Додавання такого файлу на ваш розсуд, але ми рекомендуємо все-таки робити це.
Такі файли можна створювати або в діалозі Експорту на кроці Відповідність таблиць, або вручну з використанням текстового редактора.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Source-to-Target table mappings for clients and deals -->
<TableMappings>
<Items>
<TableMapping>
<Source>
<TableName>detail.client</TableName>
</Source>
<Target>
<TableName>dbo.client</TableName>
<TableDescription>Clients</TableDescription>
<RecordLogFileName></RecordLogFileName>
<BadRecordLogFileName></BadRecordLogFileName>
</Target>
<FieldMappings>
<Items>
<FieldMapping>
<Source>
<FieldName>client_id</FieldName>
<FieldType>Integer</FieldType>
</Source>
<Target>
<FieldName>client_id</FieldName>
<FieldType>int</FieldType>
<FieldNotNull>1</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>INT</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>first_name</FieldName>
<FieldType>WideString</FieldType>
</Source>
<Target>
<FieldName>first_name</FieldName>
<FieldType>nvarchar</FieldType>
<FieldSize>128</FieldSize>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>NVARCHAR(128)</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>last_name</FieldName>
<FieldType>WideString</FieldType>
</Source>
<Target>
<FieldName>last_name</FieldName>
<FieldType>nvarchar</FieldType>
<FieldSize>128</FieldSize>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>NVARCHAR(128)</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>middle_name</FieldName>
<FieldType>WideString</FieldType>
</Source>
<Target>
<FieldName>middle_name</FieldName>
<FieldType>nvarchar</FieldType>
<FieldSize>128</FieldSize>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>NVARCHAR(128)</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>birth_date</FieldName>
<FieldType>Date</FieldType>
</Source>
<Target>
<FieldName>birth_date</FieldName>
<FieldType>datetime</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>DATETIME</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>passport</FieldName>
<FieldType>WideString</FieldType>
</Source>
<Target>
<FieldName>passport</FieldName>
<FieldType>nvarchar</FieldType>
<FieldSize>64</FieldSize>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>NVARCHAR(64)</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>sex_id</FieldName>
<FieldType>WideString</FieldType>
</Source>
<Target>
<FieldName>sex_id</FieldName>
<FieldType>char</FieldType>
<FieldSize>1</FieldSize>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>CHAR(1)</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>created</FieldName>
<FieldType>TimeStamp</FieldType>
</Source>
<Target>
<FieldName>created</FieldName>
<FieldType>datetime</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>DATETIME</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>no_middle_name</FieldName>
<FieldType>Boolean</FieldType>
</Source>
<Target>
<FieldName>no_middle_name</FieldName>
<FieldType>bit</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>BIT</FieldSQLSpecification>
<FieldDescription>Sign that the client does not have a middle name</FieldDescription>
</Target>
</FieldMapping>
</Items>
</FieldMappings>
</TableMapping>
<TableMapping>
<Source>
<TableName>detail.deal</TableName>
</Source>
<Target>
<TableName>dbo.deal</TableName>
<TableDescription>Client deals</TableDescription>
<RecordLogFileName></RecordLogFileName>
<BadRecordLogFileName></BadRecordLogFileName>
</Target>
<FieldMappings>
<Items>
<FieldMapping>
<Source>
<FieldName>deal_id</FieldName>
<FieldType>LargeInt</FieldType>
</Source>
<Target>
<FieldName>deal_id</FieldName>
<FieldType>BIGINT</FieldType>
<FieldNotNull>1</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>BIGINT</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>state_id</FieldName>
<FieldType>SmallInt</FieldType>
</Source>
<Target>
<FieldName>state_id</FieldName>
<FieldType>SMALLINT</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>SMALLINT</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>client_id</FieldName>
<FieldType>Integer</FieldType>
</Source>
<Target>
<FieldName>client_id</FieldName>
<FieldType>INTEGER</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>INTEGER</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>creation_date</FieldName>
<FieldType>Date</FieldType>
</Source>
<Target>
<FieldName>creation_date</FieldName>
<FieldType>DATETIME</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>DATETIME</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>deal_number</FieldName>
<FieldType>WideString</FieldType>
</Source>
<Target>
<FieldName>deal_num</FieldName>
<FieldType>NVARCHAR</FieldType>
<FieldSize>25</FieldSize>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>NVARCHAR(25)</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>close_date</FieldName>
<FieldType>Date</FieldType>
</Source>
<Target>
<FieldName>close_date</FieldName>
<FieldType>DATETIME</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>DATETIME</FieldSQLSpecification>
</Target>
</FieldMapping>
</Items>
</FieldMappings>
</TableMapping>
<TableMapping>
<Source>
<TableName>detail.payment</TableName>
</Source>
<Target>
<TableName>dbo.payment</TableName>
<RecordLogFileName></RecordLogFileName>
<BadRecordLogFileName></BadRecordLogFileName>
</Target>
<FieldMappings>
<Items>
<FieldMapping>
<Source>
<FieldName>payment_id</FieldName>
<FieldType>Integer</FieldType>
</Source>
<Target>
<FieldName>payment_id</FieldName>
<FieldType>INTEGER</FieldType>
<FieldNotNull>1</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>INTEGER</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>payment_date</FieldName>
<FieldType>Date</FieldType>
</Source>
<Target>
<FieldName>payment_date</FieldName>
<FieldType>DATETIME</FieldType>
<FieldNotNull>1</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>DATETIME</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>deal_id</FieldName>
<FieldType>LargeInt</FieldType>
</Source>
<Target>
<FieldName>deal_id</FieldName>
<FieldType>BIGINT</FieldType>
<FieldNotNull>1</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>BIGINT</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>payment_amount</FieldName>
<FieldType>BCD</FieldType>
</Source>
<Target>
<FieldName>payment_amount</FieldName>
<FieldType>FLOAT</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue></FieldDefaultValue>
<FieldSQLSpecification>FLOAT</FieldSQLSpecification>
</Target>
</FieldMapping>
<FieldMapping>
<Source>
<FieldName>ts</FieldName>
<FieldType>TimeStamp</FieldType>
</Source>
<Target>
<FieldName>ts</FieldName>
<FieldType>DATETIME</FieldType>
<FieldNotNull>0</FieldNotNull>
<FieldDefaultValue>GetDate()</FieldDefaultValue>
<FieldSQLSpecification>DATETIME</FieldSQLSpecification>
</Target>
</FieldMapping>
</Items>
</FieldMappings>
</TableMapping>
</Items>
</TableMappings>
Див. також:
Відкриття баз даних PostgreSQL
Відкриття баз даних SQL Server