Saturday, November 8, 2014

DBLink PostgreSQL To MySQL

  1. Устанавливаем git
    sudo yum install git
  2. Скачиваем модуль sqlite_fdw
    wget git clone git://github.com/atris/JDBC_FDW.git
  3. Создаем ссылку libjvm.so
    sudo ln -s /usr/lib/jvm/java-1.7.0/jre/lib/i386/server/libjvm.so /usr/lib/libjvm.so
  4. Заходим в каталог JDBC_FDW
    cd JDBC_FDW
  5. Устанавливаем модуль
    sudo PATH=/usr/pgsql-9.3/bin/:$PATH make USE_PGXS=1 install
  6. Входим в систему из под пользователя postgres
    sudo su - postgres
  7. Входим в postgresql
    psql
  8. Выбираем базу данных
    \c YourDatabase
  9. Создаем расширение
    CREATE EXTENSION jdbc_fdw;
  10. Создаем сервер
    CREATE SERVER jdbc_mysql FOREIGN DATA WRAPPER jdbc_fdw
        OPTIONS(
            drivername 'com.mysql.jdbc.Driver',
            url 'jdbc:mysql://192.168.1.2:3306/your_data_base',
            querytimeout '15',
            jarfile 'path_to/mysql-connector-java-5.1.22-bin.jar',
            maxheapsize '600'
        );
  11. Создаем мапинг пользователя
    CREATE USER MAPPING FOR PUBLIC SERVER jdbc_mysql
        OPTIONS(
            username 'root',
            password '123'
        );
  12. Создаем внешнюю таблицу
    CREATE FOREIGN TABLE test_tbl (
            a integer,
            b text)
        SERVER jdbc_mysql OPTIONS(table 'm_test');

Импорт КЛАДР в базу данных SQLITE

Конвертация КЛАДР в формат sqlite.
  1. Скачиваем кладр с официального сайта
    wget www.gnivc.ru/html/gnivcsoft/KLADR/Base.7z
  2. Устанавливаем архиватор 7z
    sudo yum install p7zip
  3. Распаковываем архив
    7za e Base.7z
  4. Устанавливаем sqlite
    sudo yum install sqlite
  5. Устанавливаем sqlite3-dbf
    sudo yum install sqlite3-dbf
  6. Запускаем sqlite3
    sqlite3 my_kladr.db
  7. В sqlite загружаем модуль libspatialite
    .load libspatialite.so.2
  8. Импорт данных из КЛАДР в sqlite
    CREATE VIRTUAL TABLE virt_street_tbl USING VirtualDbf('/home/developer/kladr/STREET.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_socrbase_tbl USING VirtualDbf('/home/developer/kladr/SOCRBASE.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_kladr_tbl USING VirtualDbf('/home/developer/kladr/KLADR.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_flat_tbl USING VirtualDbf('/home/developer/kladr/FLAT.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_doma_tbl USING VirtualDbf('/home/developer/kladr/DOMA.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_altnames_tbl USING VirtualDbf('/home/developer/kladr/ALTNAMES.DBF', 'CP866');

    create table street_tbl as select * from virt_street_tbl;
    create table socrbase_tbl as select * from virt_socrbase_tbl;
    create table kladr_tbl as select * from virt_kladr_tbl;
    create table flat_tbl as select * from virt_flat_tbl;
    create table doma_tbl as select * from virt_doma_tbl;
    create table altnames_tbl as select * from virt_altnames_tbl;

    drop table virt_street_tbl;
    drop table virt_socrbase_tbl;
    drop table virt_kladr_tbl;
    drop table virt_flat_tbl;
    drop table virt_doma_tbl;
    drop table virt_altnames_tbl;
  9. Выходим из sqlite
    .exit
Резлуьтат: файл my_kladr.db содержит КЛАДР в формате sqlite.

Импорт КЛАДР в базу данных PostgreSQL

Конвертация КЛАДР в формат sqlite.
  1. Скачиваем кладр с официального сайта
    wget www.gnivc.ru/html/gnivcsoft/KLADR/Base.7z
  2. Устанавливаем архиватор 7z
    sudo yum install p7zip
  3. Распаковываем архив
    7za e Base.7z
  4. Устанавливаем sqlite
    sudo yum install sqlite
  5. Устанавливаем sqlite3-dbf
    sudo yum install sqlite3-dbf
  6. Запускаем sqlite3
    sqlite3 my_kladr.db
  7. В sqlite загружаем модуль libspatialite
    .load libspatialite.so.2
  8. Импорт данных из КЛАДР в sqlite
    CREATE VIRTUAL TABLE virt_street_tbl USING VirtualDbf('/home/developer/kladr/STREET.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_socrbase_tbl USING VirtualDbf('/home/developer/kladr/SOCRBASE.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_kladr_tbl USING VirtualDbf('/home/developer/kladr/KLADR.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_flat_tbl USING VirtualDbf('/home/developer/kladr/FLAT.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_doma_tbl USING VirtualDbf('/home/developer/kladr/DOMA.DBF', 'CP866');
    CREATE VIRTUAL TABLE virt_altnames_tbl USING VirtualDbf('/home/developer/kladr/ALTNAMES.DBF', 'CP866');

    create table street_tbl as select * from virt_street_tbl;
    create table socrbase_tbl as select * from virt_socrbase_tbl;
    create table kladr_tbl as select * from virt_kladr_tbl;
    create table flat_tbl as select * from virt_flat_tbl;
    create table doma_tbl as select * from virt_doma_tbl;
    create table altnames_tbl as select * from virt_altnames_tbl;

    drop table virt_street_tbl;
    drop table virt_socrbase_tbl;
    drop table virt_kladr_tbl;
    drop table virt_flat_tbl;
    drop table virt_doma_tbl;
    drop table virt_altnames_tbl;
  9. Выходим из sqlite
    .exit
Резлуьтат: файл my_kladr.db содержит КЛАДР в формате sqlite.

Подключение файла my_kladr.db к базе данных PostgreSQL
  1. Скачиваем модуль sqlite_fdw
    wget https://github.com/gleu/sqlite_fdw/archive/master.zip
  2. Устанавливаем unzip
    sudo yum install unzip
  3. Распаковываем архив
    unzip master
  4. Заходим в каталог sqlite_fdw-master
    cd sqlite_fdw-master
  5. Устанавливаем модуль
    sudo PATH=/usr/pgsql-9.3/bin/:$PATH make USE_PGXS=1 install
  6. Входим в систему из под пользователя postgres
    sudo su - postgres
  7. Входим в postgresql
    psql
  8. Выбираем базу данных
    \c YourDatabase
  9. Создаем расширение
    CREATE EXTENSION sqlite_fdw;
  10. Создаем сервер
    CREATE SERVER sqlite_kladr_server
        FOREIGN DATA WRAPPER sqlite_fdw
        OPTIONS (database 'path_to_my_kladr.db');
  11. Создаем схему
    create schema kladr;
  12. Создаем внешние таблицы
    CREATE FOREIGN TABLE kladr.street_tbl(
      id bigint,
      name varchar,
      type varchar,
      code varchar,
      c2 varchar,
      c3 varchar,
      c4 varchar,
      c5 varchar)
        SERVER sqlite_kladr_server
         OPTIONS (table 'street_tbl');

    CREATE FOREIGN TABLE kladr.socrbase_tbl(
      id bigint,
      id1 bigint,
      short_name varchar,
      full_name varchar,
      id3 bigint)
        SERVER sqlite_kladr_server
         OPTIONS (table 'socrbase_tbl');

    CREATE FOREIGN TABLE kladr.kladr_tbl(
      id bigint,
      name varchar,
      type varchar,
      code varchar,
      c4 varchar,
      c5 varchar,
      c6 varchar,
      c7 bigint)
        SERVER sqlite_kladr_server
         OPTIONS (table 'kladr_tbl');

    CREATE FOREIGN TABLE kladr.doma_tbl(
      id bigint,
      house varchar,
      c1 varchar,
      c2 varchar,
      c3 varchar,
      c4 varchar,
      c5 varchar,
      c6 varchar,
      c7 varchar)
        SERVER sqlite_kladr_server
         OPTIONS (table 'doma_tbl');

    CREATE FOREIGN TABLE kladr.altnames_tbl(
      id bigint,
      code1 varchar,
      code2 varchar,
      c1 varchar)
        SERVER sqlite_kladr_server
         OPTIONS (table 'altnames_tbl');
  13. Проверяем работу
    select * from kladr.kladr_tbl limit 10;
Результат: Кладр подключен к базе данных PostgreSQL.