Цей розділ описує експортування групи таблиць з бази даних 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 і використовувати їх незалежно.

Кроки експорту

  1. Відкрийте вихідну базу даних.
  2. Ви можете експортувати вибрані таблиці або відкриті набори даних будь-якого виду.
    • Експортування вибраних таблиць
      1. Перейдіть до закладки Таблиці ліворуч.
      2. Клікніть список таблиць правою кнопкою і виберіть Множинний вибір.
      3. Виберіть таблиці для експорту.
      4. Клікніть кнопку Експорт або виберіть меню Інструменти | Експорт даних | Вибрані таблиці....
    • Експортування відкритих наборів даних (можна використовувати результати запитів SQL або мікс запитів та таблиць)
      1. Відкрийте кілька вікон SQL, впишіть туди тексти потрібних запитів SQL та виконайте їх для отримання даних. Відкрийте також потрібні таблиці і перейдіть на закладку Дані.
      2. Виберіть меню Інструменти | Експорт даних | Відкриті набори даних....
      3. Виберіть набори даних для експорту та клікніть OK.
  3. Перейдіть до закладки База даних, виберіть вашу зареєстровану цільову базу даних та вкажіть параметри експорту. Майте на увазі наступне:
    • Увімкніть опцію Режим економії пам'яті і пов'язані з нею опції. В разі проблем при експорті, якщо є підозра, що вони викликані цими опціями, спробуйте іншу їх комбінацію. Якщо вихідні дані та/або назви колонок джерела або цілі можуть містити символи Unicode, переконайтеся, що вибрали коректне кодування потоку SQL, наприклад, UTF-8.
    • Виберіть Режим експорту, який слід застосувати для більшості таблиць. Ви зможете при потребі перевизначити його на наступному етапі для певних таблиць. Тобто, наприклад, для більшості таблиць це може бути Replace+Insert, для деяких - Update, ще інших - Delete і т.д.
    • Залиште поле для цільової таблиці пустим, інакше дані будуть експортуватися до однієї таблиці.
    • Чим більше значення Commit-інтервалу, тим швидше експортуватимуться дані. Проте занадто великі значення можуть викликати помилки роботи з оперативною пам'яттю та інші проблеми. Тому спробуйте погратися з цим параметром для знаходження оптимального значення перед портуванням рішення до продуктивного середовища.
    Експорт групи таблиць до SQL Server
  4. Клікніть Далі і вкажіть відповідності таблиць джерело-ціль, тобто відповідності між вихідними наборами даних та цільовими таблицями.

    Тут можна вказати повні специфікації колонок для цільових таблиць, а також перевизначити Режим експорту для певних таблиць (якщо вам потрібен різний режим експорту для різних таблиць).

    PostgreSQL і SQL Server підтримують описи (коментарі) таблиць та колонок, і ви їх також можете вказати тут; використовуйте макрос <copy_from_source>, щоб змусити програму копіювати описи з вихідних таблиць (якщо є) до цільових. Майте на увазі, що описи застосовуються лише під час створення таблиць і ігноруються, якщо режим експорту вказує лише додавання, оновлення або вилучення записів в існуючій таблиці.

    Ви можете пропустити цей крок, клікнувши Експорт замість Далі, тоді відповідності вибудуються неявним чином згідно з правилами іменування в цільовій базі даних та вибраними опціями.

  5. Клікніть Експорт, щоб розпочати процедуру експорту. Ви можете перервати цю процедуру, натиснувши клавішу 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

 Експорт даних

 Формат експорту База даних

 Параметри запуску: Експорт / Імпорт даних

 Файл відповідностей таблиць

 Файл операцій