Цей розділ описує експортування групи таблиць з бази даних PostgreSQL до бази даних Microsoft SQL Server в Database Tour.
Підготовка до експортування
Це не обов'язково, але рекомендується зареєструвати і вихідну, і цільову бази даних перед тим, як ви почнете налаштовувати ваш процес експорту.
Обидві бази даних повинні підтримувати однакову архітектуру: 32-bit або 64-bit. Тобто обидві бази даних повинні успішно відкриватися однією копією (instance) Database Tour.
Для обох баз даних рекомендується використовувати інтерфейс FD.
Кроки експорту
- Відкрийте вихідну базу даних.
- Перейдіть до закладки Таблиці ліворуч. Клікніть список таблиць правою кнопкою і виберіть Множинний вибір.
- Виберіть таблиці для експорту.
- Клікніть кнопку Експорт.
- Перейдіть до закладки База даних та виберіть вашу зареєстровану цільову базу даних. Вкажіть необхідні опції експорту (в т.ч. виберіть коректний Режим експорту). Залиште поле для цільової таблиці пустим, інакше дані будуть експортуватися до однієї таблиці (в цьому випадку необхідно, щоб вихідні таблиці мали однакову або дуже подібну структуру).
- Клікніть Далі і вкажіть відповідності таблиць джерело-ціль. Ви можете пропустити цей крок, клікнувши Експорт замість Далі, тоді відповідності між таблицями джерела та цілі визначаються автоматично в залежності від вибраного цільового формату та опцій.
- Клікніть Експорт.
У випадку проблем з продуктивністю: Спробуйте різні комбінації опцій Збереження пам'яті та 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 /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
Вказує файл з відповідностями таблиць. Відповідності таблиць містять список відповідностей, де кожній вихідній таблиці відповідає певна цільова таблиця. Див. приклад файлу відповідностей таблиць нижче.
/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>
<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>
</Target>
</FieldMapping>
</Items>
</FieldMappings>
</TableMapping>
<TableMapping>
<Source>
<TableName>detail.deal</TableName>
</Source>
<Target>
<TableName>dbo.deal</TableName>
<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