++ Конвертация КЛАДР (классификатор адресов России) в формат 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
Устанавливаем unzipsudo 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:
Обсуждается: http://www.opennet.me/tips/info/2862.shtml
Может поделитесь с практическим применением этого.
1. TS: look at your link: 404 NOT FOUND.2. Результат: стандартизированный классификатор местных адресов можно за полтора часа прикрутить к своему проекту. Как следствие - упрощенное взаимодействие с внешними системами.
3. КЛАДР - это современно, модно, молодёжно!
Я правильно понимаю что в PostgreSQL будет тот же бардак, что и в DBF-файлах КЛАДР? Как на счёт реляционных связей?
А что мешает создать кеширующие таблицы с индексами и пуржем, в случае изменения количества записей в dbf?
Как это поможет?
Я про то, что DBF файлы КЛАДР - это совершенно плоские не взаимосвязанные таблицы. Использовать их в таком "чистом" виде в SQL не получится. В сообщении описана процедура загрузки этих таблиц в SQL, но хотелось бы ещё увидеть и алгоритм построения реляционных связей между ними. Иначе не вижу никакой разницы в DBF ли они, в PostgreSQL, Oracle & etc.
Эм... моя не понимать тебя.
Есть прилагалище, типа 1Цэ, ему подавай базу в постгресе.
Подключили - профит!
Я в 1С некопенгаген, если оно умеет работать с таблицами КЛАДР "as is", тогда конечно - статья самодостаточна, больше ничего не надо.
Вам учебников по нормализации (и денормализации) мало?Есть конкретный алгоритм загрузки кладр'а (да и любых данных из dbf по аналогии) в sqlite и postgresql, за что автору и спасибо.
Дальше их крутите/вертите как хотите. Уже средствами самой субд.
> Вам учебников по нормализации (и денормализации) мало?Вы КЛАДР видели? Представляете как он устроен? Способов его "нормализации" знаю несколько, но хотелось увидеть как это делают другие, так сказать, в плане обмена опытом. Вдруг у кого-то есть более элегантное решение, а я не знаю :(
Спасибо за статью!
Как автор утилиты 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
Также в пакете есть утилиты для быстрого поиска (можно сами запросы посмотреть в исходниках).
КЛАДР - уже не современно :)
Надо пользоваться "Федеральной информационной адресной системой (ФИАС)" http://fias.nalog.ru/
Чем она лучше? В чём разница, кроме формата хранения данных?
Можно поискать в Интернете, например:
http://habrahabr.ru/company/hflabs/blog/230823/А по личному опыту:
1) В КЛАДРе заменяется код адрес, в итоге имеем плывун. В ФИАСе этот момент учтен.
2) Так как что ФИАС, что КЛАДР, ведется людьми, то имеются переодически кривые данные - то с домами, то еще с чем-нить.
скоро эих бюаз не будет, а будет одлна новороссия, и царство Аллаха на юге
Мне интересно: автор в курсе издержек своих рекомендаций?«Если Вы ставите программы или драйвера руками в обход системы Portage, например, так:
…
make install
или используете установщики производителя (nVidia, AMD/ATi и т.п.), то не надо просить помощи на форуме или писать в Gentoo Bugzilla. Вы и только Вы сломали свою систему. Здесь Вам, как говорится, не тут, и тем более не Microsoft® Windows™.
Надеемся, в следующий раз Вы будете умнее и будете ставить все только через Portage!
…»
gentoo.ru/node/14443Рекомендация тривиальным образом преобразуется для описания произвольного дистрибутива.
Если какие-то долбодятлы считают, что систему можно сломать нештатной установкой софта, то это еще не значит, что это так. А вообще построение анально огороженной системы - это к эпл и прочим проприетастам (где софт by design только из огороженного маркета).Вы _можете_ так ставить что угодно, если понимаете, что делаете.
Можете. И даже можете считать себя после таких операций "крутым одмином".Серьезный подход - это создание пакета в формате используемого пакетного менеджера для требуемого ПО.
да, не... как раз за такими распальцоваными д******и, как ты, потом приходится убирать нормальным админам...
Зачем писать свой велосипед, если он уже давно написан? Не проще ли воспользоваться уже готовыми решениями от dadata.ru или kladr-api.ru ?
"из-под" пишется через дефис
В "стандартных" репах пакета sqlite3-dbf не нашлось, зато нашелся пакет dbf, который прекрасно справился с задачей, с оговоркой, что нужно использовать опцию --noconv иначе беда с кодировкой.