The OpenNET Project / Index page

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

Импорт КЛАДР в базу данных 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. Результат: стандартизированный классификатор местных адресов можно за полтора часа прикрутить к своему проекту. Как следствие - упрощенное взаимодействие с внешними системами.

    3. КЛАДР - это современно, модно, молодёжно!

     

  • 1.3, garrick (?), 14:35, 14/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я правильно понимаю что в PostgreSQL будет тот же бардак, что и в DBF-файлах КЛАДР? Как на счёт реляционных связей?
     
     
  • 2.4, Гость (??), 14:55, 14/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А что мешает создать кеширующие таблицы с индексами и пуржем, в случае изменения количества записей в dbf?
     
     
  • 3.5, garrick (?), 15:41, 14/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Как это поможет?
    Я про то, что DBF файлы КЛАДР - это совершенно плоские не взаимосвязанные таблицы. Использовать их в таком "чистом" виде в SQL не получится. В сообщении описана процедура загрузки этих таблиц в SQL, но хотелось бы ещё увидеть и алгоритм построения реляционных связей между ними. Иначе не вижу никакой разницы в DBF ли они, в PostgreSQL, Oracle & etc.
     
     
  • 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 [^] [^^] [^^^] [ответить]  
  • +/
    Вам учебников по нормализации (и денормализации) мало?

    Есть конкретный алгоритм загрузки кладр'а (да и любых данных из dbf по аналогии) в sqlite и postgresql, за что автору и спасибо.
    Дальше их крутите/вертите как хотите. Уже средствами самой субд.

     
     
  • 5.11, garrick (?), 10:16, 17/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Вам учебников по нормализации (и денормализации) мало?

    Вы КЛАДР видели? Представляете как он устроен? Способов его "нормализации" знаю несколько, но хотелось увидеть как это делают другие, так сказать, в плане обмена опытом. Вдруг у кого-то есть более элегантное решение, а я не знаю :(


     

  • 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 (ok), 07:26, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Можете. И даже можете считать себя после таких операций "крутым одмином".

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

     
  • 3.19, crypt (ok), 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 (ok), 04:18, 17/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В "стандартных" репах пакета  sqlite3-dbf не нашлось, зато нашелся пакет dbf, который прекрасно справился с задачей, с оговоркой, что нужно использовать опцию --noconv иначе беда с кодировкой.
     

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




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру