June 10, 2011

Установка PostgreSQL+PostGIS

    Делали в универе командный курсовик и нужно было использовать PostGIS. Дело в том, что курсовик был взят не из списка стандартных заданий, а являлся частью одного разрабатываемого мной проекта. Так как курсовик командный, то не удивительно, что у членов команды ОС отличались. Я, конечно, не говорю, что в случае командной работы у всех должны быть разные ОС, но в нашем случае вышло именно так. В конечный список ОС попали следующие: Windows XP, Windows 7, Ubuntu и LinuxMint. Принципиальных различий в процессе установки нет. Что XP - винда, что семерка - винда. Что Ubuntu - GNU/Linux, что LinuxMint - GNU/Linux, еще и основанная на Ubuntu. И там, и там можно ставить как с бинарников, так и с исходников. К тому же в unix-подобных системах есть репозитории. В процессе работы я еще мучил с десяток дистрибутивов GNU/Linux в ознакомительных целях и как-то решил поставить PostGIS на Mandriva. Не помню почему, но почему-то пришлось повозиться несколько дольше, чем при работе с другими дистрибутивами. Исходя из этого писать про Mandriva не буду. Хотел еще поставить на Gentoo и написать об этом, но пока что совсем нет времени колупаться с ней.
   Итак, заканчивая лирическое вступление, скажу, в каких ОС будет рассмотрена установка PostGIS:
  1. Windows XP
  2. Ubuntu 11.04
  3. Arch Linux


    Windows XP 

    С виндой дела обстоят достаточно просто. Скачиваем 2 бинарника и запускаем их по очереди. Первый бинарник - это сам сервер постгрес. Его можно скачать на официальном сайте. Второй бинарник - это, как подсказывает Капитан Очевидность, сама примочка PostGIS. Её можно взять здесь. В случае с виндой разработчики PostgreSQL всё сделали на удивление хорошо. Устанавливая сам сервер, Вам еще прикрутят PgAdmin, дадут каких-то пряников и сверху положат StackBuilder. Эта штука позволяет не рыться в недрах интернета и не искать всякие другие штуки, типа PostGIS и Slony-I. Так что, возможно, Вы захотите скачать только инсталлятор сервера, а дальше заставить StackBuilder делать своё грязное дело. Вам так же никто не запрещал устанавливать всё из исходников:).
   О том, как всё это дело установить, разработчики уже написали и, как в детской книжке, все проиллюстрировали. Посмотреть на это можно прямо здесь. Единственное, что хочу заметить, так это то, что в процессе установки PostGIS галочку "Create spatial database" лучше не снимать, если Вам нравится, когда кто-то за Вас делает какую-то работу. Лично мне нравится, когда инсталлятор устанавливает за меня необходимые функции и прочее, а потом еще и делает шаблон, на основании которого можно в будущем создавать базы данных двумя-тремя щелчками мыши.
   Следует заметить, что установщик содержит версию 1.5 PostGIS (или свежее). Если после его установки необходимо обеспечить поддержку баз данных с более ранними версиями PostGIS, то скачать отсюда бинарники (архив) и добавить содежимое каталогов "lib" и "share" в одноимённые каталоги Postgres (например, C:\Program Files\PostgreSQL\8.4\)

    Ubuntu 11.04 

    Перед тем как читать данный пункт, посмотрите на всякий случай п.3 : установка для Arch Linux (даже если у Вы используете другой дистрибутив).

    В убунте далеко ходить не надо. Открыли терминал, ввели указанные ниже команды и получили то, что нам нужно, а именно: сервер, клиент, библиотеки, документацию, постгис, графическое приложение для администрирования.
sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4 postgresql-doc-8.4 postgresql-8.4-postgis
sudo apt-get install pgadmin3
    Как видно из команд, версия сервера у нас выйдет 8.4. Если быть точнее, то выполнив sql-запрос
SELECT version();
    в моём случае версия определилась как 8.4.8.
    Дальше необходимо настроить сам сервер БД. Не желая заниматься копипастом, просто приведу ниже пару ссылок, где об этом написано вполне доходчиво.
  1. Англоязычная статья на hocuspokus.net.
  2. Её русскоязычный перевод с примечаниями на welinux.ru.
    Кое-что хочу добавить от себя. Во-первых, прописывая пути каталогов, будьте внимательны к версии сервера (у Вас же необязательно версия 8.3, как в примере)
    Во-вторых, в файле "pg_hba.conf" строка
# Database administrative login by UNIX sockets
local all postgres ident sameuser
    не понравилась серверу и пришлось заменить её на эту:
local all postgres md5
   Это то, что касалось установки и настройки самого сервера.

   Теперь нужно настроить PostGIS (вернее даже не настроить, а прикрутить к серверу).
    Создадим новый шаблон и зарегистрируем диалект на сервере:
sudo su postgres
createdb postgistemplate
createlang plpgsql postgistemplate
    При этом нас попросят ввести пароль пользователя.
    Далее необходимо наполнить шаблон функциями и информацией о типах данных.
psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-comments.sql
    Хочу заметить, что расположение скриптов может несколько отличаться, но обычно не больее, чем на 1-2 ветки. Теперь осталось перезапустить сервер и можно приступать к работе. Для наглядности создадим через pgAdmin новый сервер. Пример того, что получилось, представлен на рисунке ниже. Как видно, присутствуют два шаблона: postgres и созданный нами postgistemplate.


    Узнаем версию установленного PostGIS, выполнив запрос:
SELECT postgis_full_version();
    в моём случае версия определилась как 1.5.1.

    Arch Linux 

    Для Arch Linux процесс установки не очень-то отличается от описанного выше (линукс всюду одинаков) и отлично документирован на официальном сайте. Установку PostgreSQL можно посмотреть [тут] (есть даже русскоязычный вариант, по все-таки предпочитаю английский), а установку PostGIS - [тут]. Лично я рекомендую читать именно эти инструкции.
    Кстати, в репозиториях вполне свежие версии (в данный момент 9.1.2 для PostgreSQL и 1.5.3 для PostGIS).

4 comments:

  1. при выполнении запроса psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql

    выдаются ошибки типа
    psql:/usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql:5682: ERROR: current transaction is aborted, commands ignored until end of transaction block
    psql:/usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql:5688: ERROR: current transaction is aborted, commands ignored until end of transaction block
    psql:/usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql:5807: ERROR: current transaction is aborted, commands ignored until end of transaction block
    psql:/usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql:5886: ERROR: current transaction is aborted, commands ignored until end of transaction block
    psql:/usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql:6038: ERROR: current transaction is aborted, commands ignored until end of transaction block
    psql:/usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql:6048: ERROR: current transaction is aborted, commands ignored until end of transaction block
    psql:/usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql:6054: ERROR: current transaction is aborted, commands ignored until end of transaction block



    не подскажете в чем дело???

    ReplyDelete
    Replies
    1. очевидно, что в качестве параметра в запрос передается postgis.sql из версии postgis 1.5 для postgres 8.4, в то время как вызывается psql для postgres 9.1, а так же с ним используется postgis 2.0. Или явно вызывайте psql для postgres 8.4 или просто поправьте путь в команде вызова

      Delete
  2. Последнее время я использую Valentina Studio для работы с postgresql на ubuntu. Очень хороший и бесплатный инструмент, рекомендую посмотреть.http://www.valentina-db.com/en/valentina-studio-overview

    ReplyDelete
  3. Valentina Studio работает c postgis?

    ReplyDelete