Skip to content

Instantly share code, notes, and snippets.

@maxp
Created November 17, 2014 04:11
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save maxp/6f9ff80825666102f446 to your computer and use it in GitHub Desktop.
Save maxp/6f9ff80825666102f446 to your computer and use it in GitHub Desktop.
Конвертация КЛАДР (классификатор адресов России) в формат sqlite.
!READ FIRST!
http://sqlite.mobigroup.ru/wiki?name=sqlite3-dbf
http://sqlite.mobigroup.ru/wiki?name=sqlite3-kladr
Orig: http://www.opennet.ru/tips/2862_postgresql_kladr.shtml
Конвертация КЛАДР (классификатор адресов России) в формат 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment