10 окт. 2012 г.

Со времен университета зарекался никогда не влезать в ГИС и все, что с этим связано. И со времен все того же университета все эти ГИС преследуют меня постоянно :) На одном из предыдущих мест работы мне приходилось работать со связкой MapInfo + Oracle. Теперь же пришлось испытать опенсорсные проекты QuantumGIS + PostGIS.
Начнем с установки всего этого добра.

Итак по порядку.
QuantumGIS - по сути бесплатный аналог MapInfo или ArcGIS. Подробнее в википедии
PostGIS - расширение для PostgreSQL, позволяющее хранить и обрабатывать геопространственные данные. Это означает, что PostGIS сам по себе работать не будет. Ему нужна PostgreSQL. На сегодняшний день лучше ставить PostgreSQL 9.1 (посмотреть как установить и настроить можно в моей статье Установка и настройка PostgreSQL 9.1 в Ubuntu).
Соответственно все остальные компоненты нужно ставить с учетом версии PostgreSQL
pgRouting - набор методов для поиска кратчайшего пути по таким алгоритмам как Дейкстры и A*. Более подробно с возможностями можно ознакомиться на сайте проекта

Установка PostGIS и QuantumGIS

Для тех, кто работает с ГИС в убунту существует хороший репозиторий UbuntuGIS. Добавить его несложно:

sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update

В этом репозитории нас интересуют PostGIS и QuantumGIS.

sudo apt-get install postgresql-9.1-postgis
sudo apt-get install qgis

PostGIS устанавливается как расширение (extension) в PostgreSQL. Поэтому для того чтобы создать базу данных, предназначенную для хранения и обработки геопространственных данных необходимо в имеющуюся базу добавить расширение postgis. Делается это в pgAdmin. Найдите в дереве свою базу данных, а в ней узел Extensions и добавьте туда расширение postgis. Если такого расширения нет, то попробуйте обновить ветку с вашей базой данных, а если не поможет, то отсоединиться и присоединиться к серверу заново.

Установка pgRouting

pgRouting берем из репозитория команды Georepublic.

sudo add-apt-repository ppa:georepublic/pgrouting
sudo apt-get update
sudo apt-get install postgresql-9.1-pgrouting

На сим установка pgRouting не закончилась. Необходимо в определенной последовательности выполнить специальные скрипты.
Все скрипты находятся по пути /usr/share/postlbs/
Последовательность следующая:

  1. routing_core.sql
  2. routing_core_wrappers.sql
  3. routing_topology.sql
  4. matching.sql

Можно их открыть в pgAdmin и выполнить там. Заодно можно ознакомиться с содержимым этих скриптов.
Тем, кто слишком крут для графических оболочек ;) необходимо выполнить следующую последовательность команд:

psql -U postgres -f /usr/share/postlbs/routing_core.sql
psql -U postgres -f /usr/share/postlbs/routing_core_wrappers.sql
psql -U postgres -f /usr/share/postlbs/routing_topology.sql
psql -U postgres -f /usr/share/postlbs/matching.sql

При выполнении этих команд можно отхватить ошибку

psql: FATAL:  Peer authentication failed for user "postgres"

Это означает что вы не можете выполнить эти команды на сервере, потому что у вас недостаточно прав. Тут может возникнуть некоторое замешательство: вроде SQL-команда запускается от имени администратора postgres, а в то же время не достаточно прав. Все дело в том, что сама команда psql запускается от имени вашего текущего пользователя, а он, в свою очередь, не может даже соединиться с PostgreSQL (куда уж там до выполнения каких-либо команд). Из подобной ситуации есть выход - запустить psql от имени пользователя postgres

sudo -u postgres psql -U postgres -f /usr/share/postlbs/routing_core.sql

Остальные скрипты запускаются аналогично.
Ну вот и все. В будущем попробую написать пост про то, как все это дело использовать при поиске наикратчайшего пути (тем более, что русской документации по этому очень сложно найти)

3 мая 2012 г.

Ну вот и пришло время восстанваливать вконец изуродованную базу данных после различных экспериментов над ней. В прошлом посте я рассказывал как сделать дамп базы. Причем дампы у нас создавались и архивировались автоматически ежедневно.
С того времени у меня накопилось достаточно дампов. Довольный самим собой я взял последний дамп еще не изуродованной базы, распаковал ее, запустил pgAdmin III и внезапно выяснил, что он не хочет принимать мой дамп. Никак не хочет, подлец!
В результате некторого исследования я выяснил, что:
  1. я снимал дампы в формате Plain, что значит - я снимал базу в виде скриптов для ее создания, причем вместе с данными.
  2. pgAdmin III (а равно как и pg_restore) не работает с plain форматом
Ну чтож "Бяда, бяда, огорчение" да делать нечего. Порыскал в инете как там восстанавливаются базы из plain файлов и выяснил что этим занимается psql.
Команда для восстановления будет выглядеть так:
psql -U postgres -d <имя_базы_данных> -f <путь_к_файлу_с_SQL_командами>
Но если запустить сейчас такую команду, то получим множество ошибок, потому что наша база еще существует и в ней лежат какие-то данные (для СУБД они корректны). Так что сначала нашу базу данных надо удалить (возможно есть вариант просто очистки, я пока его не нашел)

Итак удаляем базу данных и заново ее создаем

psql -U postgres -c "drop database <имя_базы_данных>"
psql -U postgres -c "create database <имя_базы_данных>"

Ну вот теперь можно восстанавливать нашу базу данных из дампа.

gzip -dc <Путь_к_нашему_архиву_.gz_с_дампом> | psql -U postgres -d <имя_базы_данных> -f -

Ну вот мы и имеем чистенькую, неполоманную базу данных. Можно продолжать эксперименты.

18 апр. 2012 г.

Как говорится, пока жареный петух в жо... собственно клюнул - сервер упал (думаю, что не без участия моих кривых ручек). "Самое время" организовать систему резервного копирования баз данных. Хоть какую-нибудь. Ну хотя бы самую простейшую. Но чтобы не делать это ручками каждый день, а чтоб само всё работало. И с каждым годом я все больше убеждаюсь в том, что компьютер нам нужен не только для создания нам различных проблем (чтобы мы их потом героически решали), но и для борьбы с проблемами, причём с некоторыми из них он вполне способен справляться сам, не впутывая нас в свои компьютерные дела. Но всё это лирика.

1 апр. 2012 г.

После установки PostgreSQL необходимо задать пароль для пользователя postgres.
Надо учитывать, что их [таких пользователей] два: один - системный и второй - администратор PostgreSQL.