Цей розділ описує експортування групи таблиць з бази даних 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 або клікнувши Відмінити в додатковому віконці, що показується під час експорту.
Вирішення проблем із продуктивністю експорту
У випадку повільного експортування даних спробуйте наступне:
- Перш за все перевірте, що цільова база даних з'єднується через інтерфейс FD. Використання FD на цільовому боці дозволяє використовувати пакетний режим обробки команд SQL, що може кардинально пришвидшити процес.
- Спробуйте різні комбінації опцій Збереження пам'яті та Commit-інтервал. Рекомендується увімкнути опції Режим економії пам'яті, Використовувати параметри SQL та Пакетний режим, а також вказати 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>
Див. також




