The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Импорт КЛАДР в базу данных PostgreSQL
Конвертация КЛАДР (классификатор адресов России) в формат sqlite.

Скачиваем КЛАДР с официального сайта

    wget http://www.gnivc.ru/html/gnivcsoft/KLADR/Base.7z

Устанавливаем архиватор 7z

    sudo yum install p7zip

Распаковываем архив

    7za e Base.7z

Устанавливаем sqlite

    sudo yum install sqlite

Устанавливаем sqlite3-dbf

    sudo yum install sqlite3-dbf

Запускаем sqlite3

    sqlite3 my_kladr.db

В sqlite загружаем модуль libspatialite

    .load libspatialite.so.2

Импорт данных из КЛАДР в 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;

Выходим из sqlite

    .exit


Результат: файл my_kladr.db содержит КЛАДР в формате sqlite.


Подключение файла my_kladr.db к базе данных PostgreSQL

Скачиваем модуль sqlite_fdw

    wget https://github.com/gleu/sqlite_fdw/archive/master.zip
 
Устанавливаем unzip

    sudo yum install unzip

Распаковываем архив

    unzip master

Заходим в каталог sqlite_fdw-master

    cd sqlite_fdw-master

Устанавливаем модуль

    sudo PATH=/usr/pgsql-9.3/bin/:$PATH make USE_PGXS=1 install

Входим в систему из-под пользователя postgres

    sudo su - postgres

Входим в postgresql

    psql

Выбираем базу данных

    \\c YouDatabase

Создаем расширение

    CREATE EXTENSION sqlite_fdw;

Создаем сервер

    CREATE SERVER sqlite_kladr_server
    FOREIGN DATA WRAPPER sqlite_fdw
    OPTIONS (database 'path_to_my_kladr.db');

Создаем схему

    create schema kladr;

Создаем внешние таблицы

    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');

Проверяем работу

    select * from kladr.kladr_tbl limit 10;

Результат: Кладр подключен к базе данных PostgreSQL. 
 
14.11.2014 , Автор: Легостаев Вениамин
Ключи: postgresql, kladr / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / SQL и базы данных / PostgreSQL специфика / Оптимизация и администрирование PostgreSQL

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Рамиль, 09:19, 14/11/2014 [ответить] [смотреть все]
  • +/
    Может поделитесь с практическим применением этого.
     
     
  • 2.2, Агр, 13:03, 14/11/2014 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    1 TS look at your link 404 NOT FOUND 2 Результат стандартизированный класс... весь текст скрыт [показать] [показать ветку]
     
  • 1.3, garrick, 14:35, 14/11/2014 [ответить] [смотреть все]  
  • +/
    Я правильно понимаю что в PostgreSQL будет тот же бардак, что и в DBF-файлах КЛАДР? Как на счёт реляционных связей?
     
     
  • 2.4, Гость, 14:55, 14/11/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А что мешает создать кеширующие таблицы с индексами и пуржем, в случае изменения... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.5, garrick, 15:41, 14/11/2014 [^] [ответить] [смотреть все]  
  • +/
    Как это поможет Я про то, что DBF файлы КЛАДР - это совершенно плоские не взаи... весь текст скрыт [показать]
     
     
  • 4.6, Гость, 19:29, 14/11/2014 [^] [ответить] [смотреть все]  
  • +/
    Эм моя не понимать тебя Есть прилагалище, типа 1Цэ, ему подавай базу в постг... весь текст скрыт [показать]
     
     
  • 5.10, garrick, 10:14, 17/11/2014 [^] [ответить] [смотреть все]  
  • +/
    Я в 1С некопенгаген, если оно умеет работать с таблицами КЛАДР as is , тогда ко... весь текст скрыт [показать]
     
  • 4.7, ананим, 20:05, 14/11/2014 [^] [ответить] [смотреть все]  
  • +/
    Вам учебников по нормализации и денормализации мало Есть конкретный алгоритм ... весь текст скрыт [показать]
     
     
  • 5.11, garrick, 10:16, 17/11/2014 [^] [ответить] [смотреть все]  
  • +/
    Вы КЛАДР видели Представляете как он устроен Способов его нормализации знаю ... весь текст скрыт [показать]
     
     ....нить скрыта, показать (6)

  • 1.8, anonymous, 11:07, 16/11/2014 [ответить] [смотреть все]  
  • +/
    Спасибо за статью!
     
  • 1.9, MBG, 16:14, 16/11/2014 [ответить] [смотреть все]  
  • +1 +/
    Как автор утилиты sqlite3-dbf
    http://sqlite.mobigroup.ru/wiki?name=sqlite3-dbf
    могу сказать
    1. Для импорта dbf в постгрес достаточно единственной утилиты
    pgdbf  - converter of XBase / FoxPro tables to PostgreSQL
    2. sqlite3-dbf здесь вообще не используется - только устанавливается :)
    3. Специально для кладр я предоставляю пакет с его SQLite-версией (структура базы оптимизирована для работы, созданы индексы)
    http://sqlite.mobigroup.ru/wiki?name=sqlite3-kladr
    Также в пакете есть утилиты для быстрого поиска (можно сами запросы посмотреть в исходниках).
     
  • 1.12, Saniv, 09:42, 18/11/2014 [ответить] [смотреть все]  
  • +/
    КЛАДР - уже не современно :)
    Надо пользоваться "Федеральной информационной адресной системой (ФИАС)" http://fias.nalog.ru/
     
     
  • 2.13, garrick, 11:29, 18/11/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Чем она лучше? В чём разница, кроме формата хранения данных?
     
     
  • 3.14, Saniv, 12:36, 18/11/2014 [^] [ответить] [смотреть все]  
  • +/
    Можно поискать в Интернете, например:
    http://habrahabr.ru/company/hflabs/blog/230823/

    А по личному опыту:
    1) В КЛАДРе заменяется код адрес, в итоге имеем плывун. В ФИАСе этот момент учтен.
    2) Так как что ФИАС, что КЛАДР, ведется людьми, то имеются переодически кривые данные - то с домами, то еще с чем-нить.

     
  • 1.15, дмитрий, 23:28, 18/11/2014 [ответить] [смотреть все]  
  • +/
    скоро эих бюаз не будет, а будет одлна новороссия, и царство Аллаха на юге
     
  • 1.16, 9398, 16:35, 21/11/2014 [ответить] [смотреть все]  
  • +1 +/
    Мне интересно: автор в курсе издержек своих рекомендаций?

    «Если Вы ставите программы или драйвера руками в обход системы Portage, например, так:

    make install
    или используете установщики производителя (nVidia, AMD/ATi и т.п.), то не надо просить помощи на форуме или писать в Gentoo Bugzilla. Вы и только Вы сломали свою систему. Здесь Вам, как говорится, не тут, и тем более не Microsoft® Windows™.
    Надеемся, в следующий раз Вы будете умнее и будете ставить все только через Portage!
    …»
    gentoo.ru/node/14443

    Рекомендация тривиальным образом преобразуется для описания произвольного дистрибутива.

     
     
  • 2.17, F, 12:49, 28/11/2014 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Если какие-то долбодятлы считают, что систему можно сломать нештатной установкой софта, то это еще не значит, что это так. А вообще построение анально огороженной системы - это к эпл и прочим проприетастам (где софт by design только из огороженного маркета).

    Вы _можете_ так ставить что угодно, если понимаете, что делаете.

     
     
  • 3.18, nE0sIghT, 07:26, 05/12/2014 [^] [ответить] [смотреть все]  
  • +/
    Можете. И даже можете считать себя после таких операций "крутым одмином".

    Серьезный подход - это создание пакета в формате используемого пакетного менеджера для требуемого ПО.

     
  • 3.19, crypt, 12:55, 14/12/2014 [^] [ответить] [смотреть все]  
  • +/
    да, не... как раз за такими распальцоваными д******и, как ты, потом приходится убирать нормальным админам...
     
  • 1.20, Гость, 12:38, 15/12/2014 [ответить] [смотреть все]  
  • +/
    Зачем писать свой велосипед, если он уже давно написан? Не проще ли воспользоваться уже готовыми решениями от dadata.ru или kladr-api.ru ?
     
  • 1.21, Grammar_Nazi, 16:49, 07/01/2015 [ответить] [смотреть все]  
  • +/
    "из-под" пишется через дефис
     
  • 1.22, cmp, 04:18, 17/02/2015 [ответить] [смотреть все]  
  • +/
    В "стандартных" репах пакета  sqlite3-dbf не нашлось, зато нашелся пакет dbf, который прекрасно справился с задачей, с оговоркой, что нужно использовать опцию --noconv иначе беда с кодировкой.
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor