The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Импорт КЛАДР в базу данных PostgreSQL"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от auto_tips (??) on 14-Ноя-14, 09:19 
++ Конвертация КЛАДР (классификатор адресов России) в формат sqlite.

Скачиваем [[http://www.gnivc.ru/inf_provision/classifiers_reference/kladr/ КЛАДР]] с официального сайта

    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.

URL:
Обсуждается: https://www.opennet.ru/tips/info/2862.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Рамиль email(??) on 14-Ноя-14, 09:19 
Может поделитесь с практическим применением этого.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Агр on 14-Ноя-14, 13:03 
1. TS: look at your link: 404 NOT FOUND.

2. Результат: стандартизированный классификатор местных адресов можно за полтора часа прикрутить к своему проекту. Как следствие - упрощенное взаимодействие с внешними системами.

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от garrick on 14-Ноя-14, 14:35 
Я правильно понимаю что в PostgreSQL будет тот же бардак, что и в DBF-файлах КЛАДР? Как на счёт реляционных связей?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Гость (??) on 14-Ноя-14, 14:55 
А что мешает создать кеширующие таблицы с индексами и пуржем, в случае изменения количества записей в dbf?
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от garrick on 14-Ноя-14, 15:41 
Как это поможет?
Я про то, что DBF файлы КЛАДР - это совершенно плоские не взаимосвязанные таблицы. Использовать их в таком "чистом" виде в SQL не получится. В сообщении описана процедура загрузки этих таблиц в SQL, но хотелось бы ещё увидеть и алгоритм построения реляционных связей между ними. Иначе не вижу никакой разницы в DBF ли они, в PostgreSQL, Oracle & etc.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Гость (??) on 14-Ноя-14, 19:29 
Эм... моя не понимать тебя.
Есть прилагалище, типа 1Цэ, ему подавай базу в постгресе.
Подключили - профит!
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от ананим on 14-Ноя-14, 20:05 
Вам учебников по нормализации (и денормализации) мало?

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от anonymous (??) on 16-Ноя-14, 11:07 
Спасибо за статью!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Импорт КЛАДР в базу данных PostgreSQL"  +1 +/
Сообщение от MBG on 16-Ноя-14, 16:14 
Как автор утилиты 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
Также в пакете есть утилиты для быстрого поиска (можно сами запросы посмотреть в исходниках).
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от garrick on 17-Ноя-14, 10:14 
Я в 1С некопенгаген, если оно умеет работать с таблицами КЛАДР "as is", тогда конечно - статья самодостаточна, больше ничего не надо.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

11. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от garrick on 17-Ноя-14, 10:16 
> Вам учебников по нормализации (и денормализации) мало?

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


Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Saniv email on 18-Ноя-14, 09:42 
КЛАДР - уже не современно :)
Надо пользоваться "Федеральной информационной адресной системой (ФИАС)" http://fias.nalog.ru/
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от garrick on 18-Ноя-14, 11:29 
Чем она лучше? В чём разница, кроме формата хранения данных?
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Saniv email on 18-Ноя-14, 12:36 
Можно поискать в Интернете, например:
http://habrahabr.ru/company/hflabs/blog/230823/

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

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от дмитрий (??) on 18-Ноя-14, 23:28 
скоро эих бюаз не будет, а будет одлна новороссия, и царство Аллаха на юге
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

16. "Импорт КЛАДР в базу данных PostgreSQL"  +1 +/
Сообщение от 9398 on 21-Ноя-14, 16:35 
Мне интересно: автор в курсе издержек своих рекомендаций?

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

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Импорт КЛАДР в базу данных PostgreSQL"  –1 +/
Сообщение от F on 28-Ноя-14, 12:49 
Если какие-то долбодятлы считают, что систему можно сломать нештатной установкой софта, то это еще не значит, что это так. А вообще построение анально огороженной системы - это к эпл и прочим проприетастам (где софт by design только из огороженного маркета).

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

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

18. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от nE0sIghT (ok) on 05-Дек-14, 07:26 
Можете. И даже можете считать себя после таких операций "крутым одмином".

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

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от crypt (ok) on 14-Дек-14, 12:55 
да, не... как раз за такими распальцоваными д******и, как ты, потом приходится убирать нормальным админам...
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

20. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Гость (??) on 15-Дек-14, 12:38 
Зачем писать свой велосипед, если он уже давно написан? Не проще ли воспользоваться уже готовыми решениями от dadata.ru или kladr-api.ru ?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

21. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от Grammar_Nazi on 07-Янв-15, 16:49 
"из-под" пишется через дефис
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

22. "Импорт КЛАДР в базу данных PostgreSQL"  +/
Сообщение от cmp (ok) on 17-Фев-15, 04:18 
В "стандартных" репах пакета  sqlite3-dbf не нашлось, зато нашелся пакет dbf, который прекрасно справился с задачей, с оговоркой, что нужно использовать опцию --noconv иначе беда с кодировкой.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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