RU:PostGIS/Installation

From OpenStreetMap Wiki
Jump to navigation Jump to search

broom

Help (89606) - The Noun Project.svg

Mapnik использует PostgreSQL / PostGIS в процессе рендеринга.

Данные инструкции описывают как установить PostgreSQL / PostGIS на Linux и Windows, создать соответствующие базы данных, и настроить параметры баз для лучшей производительности. Пожалуйста, ознакомьтесь со страницей Mapnik для дополнительной информации бо использовании Mapnik для рендеринга данных OpenStreetMap.

Рекомендуется использовать PostgreSQL 9.0 или 8.3. Версия 8.4 имеет проблемы с производительностью.

Ниже предполагается, что вы будете заменять [username] на имя пользователя, от имени которого будет запускаться mapnik

Полная установка для Ubuntu

Этот раздел описывает процедуру быстрой инсталляции для Ubuntu >=8.04. Если вы используете другую операционную систему, или желаете настроить уже установленную базу данных, пожалуйста обратитесь к разделам ниже. Рекомендуется вводить следующие строки команд шаг за шагом; это упростит процесс и убережёт от возможных ошибок.

# для Ubuntu <10.04:
  sudo apt-get install postgresql-8.3-postgis postgresql-contrib-8.3
  sudo -u postgres -i -H
  createuser -SdR gisuser
  createdb -E UTF8 -O gisuser gis
  createlang plpgsql gis
  psql -d gis -f /usr/share/postgresql/8.3/contrib/_int.sql
  psql -d gis -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql


# для Ubuntu >=10.04:
  sudo apt-get install postgresql-8.4-postgis postgresql-contrib-8.4
  sudo -u postgres -i -H
  createuser -SdR gisuser
  createdb -E UTF8 -O gisuser gis
  createlang plpgsql gis
  psql -d gis -f /usr/share/postgresql/8.4/contrib/_int.sql  #может вызвать ошибку "Please use a database without intarray" в последних версиях osm2pgsql
  psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
  # для заполнения таблицы spatial_ref_sys (в основном, для использования с osm2pgsql):
  psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql

# для всех версий
psql gis -c "ALTER TABLE geometry_columns OWNER TO gisuser"
psql gis -c "ALTER TABLE spatial_ref_sys OWNER TO gisuser"
exit

Для разрешения пользователю gisuser простого входа в базу, вам нужно изменить несколько строк в конфигурационных файлах базы данных.

# для Ubuntu <=9.10:
  sudo gedit /etc/postgresql/8.3/main/pg_hba.conf
# для Ubuntu >=10.04:
  sudo gedit /etc/postgresql/8.4/main/pg_hba.conf

Ближе к концу файла вы найдёте такие строки:

local   all         all                               ident
host    all         all         127.0.0.1/32          md5

Замените слова ident и md5 на trust и закройте редактор. Теперь перезагрузите конфигурацию базы данных:

# для Ubuntu <= 9.10:
  sudo /etc/init.d/postgresql-8.3 reload
# для Ubuntu 10.04:
  sudo /etc/init.d/postgresql-8.4 reload
# для Ubuntu >= 10.10:
  sudo /etc/init.d/postgresql reload

Для быстрого теста, войдите в базу данных пользователем базы данных gisuser, созданным ранее:

psql gis gisuser

Введите \d чтобы увидеть две таблицы, которые мы создали несколько минут назад (geometry_columns и spatial_ref_sys), затем выйдите, введя \q

Установка шаг за шагом, все операционные системы

Для Debian Sarge (old stable)

От имени root, дальше по инструкции для Debian etch

# echo deb http://www.backports.org sarge-backports main >> /etc/apt/sources.list
# apt-get -t sarge-backports install ...
Для Debian etch (onwards)

Для установки PostGIS (от имени root):

# aptitude install postgresql-postgis
или, для unstable
# aptitude install postgresql-8.4-postgis
или, для Ubuntu

Смотрите #Полная установка для Ubuntu

Для OS X Leopard

При условии наличия darwinports,

% sudo port install postgresql83
% sudo port install postgis

или воспользуйтесь Mac OS X installers от KyngChaos.

Для Fedora

Для установки PostGIS (от имени root):

Fedora 15 и ниже Fedora 16 и выше
# yum install postgis postgresql-server
# service postgresql initdb
# service postgresql start
# yum install postgis postgresql-server
# postgresql-setup initdb
# service postgresql start
Для Opensuse 11

Чтобы менеджер пакетов узнал про PostGIS, вам надо добавить репозиторий:

sudo zypper ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_11.2/ "Geo"
sudo zypper refresh

Теперь можете установить PostGIS:

sudo zypper install postgis postgresql-contrib
Для Windows

Скачайте установщик PostGIS, соответствующий вашей версии PostgreSQL, и запустите его. PostgreSQL в этот момент должен быть запущен. В субдиректорию PostgreSQL будет установлено несколько файлов и две таблицы в базе данных.

Для Gentoo

Установите сервер postgresql (сервер и клиент объединены в один пакет)

emerge --ask postgresql

Потом устанавливаем сами расширения PostGIS

emerge --ask postgis

Это может потребовать обновить файлы настроек
Например:

dispatch-conf
emerge --ask postgis

Конфигурационный файл для pg_ctl будет в /etc/conf.d/postgresql-* (по номеру версии) ; пример конфигурации самого сервера в /usr/share/postgresql/postgresql.conf.sample

Вы можете сконфигурировать кластер, используя emerge postgresql --config или вручную, если желаете что-то скорректировать.
Теперь запустите его (подставьте номер версии вместо *)

service postgresql-* start

перед выполнением инструкций ниже по созданию пользователя.

Настройка базы данных

Поскольку мы в основном выполняем массовые загрузки и хранение больших объемов данных, неплохо бы немного настроить Postgres для такой нагрузки; настройки по умолчанию, как правило, довольно консервативны. Это лишь общий обзор настроек, о которых стоит подумать. Для дополнительной информации читайте документацию. Не забывайте, что остальной системе (включая веб сервер, например), тоже нужна память для работы, не выделяйте её целиком под PostgreSQL. Вам нужно поправить файл postgresql.conf, который может лежать в /etc/postgresql/8.3/main или /var/lib/pgsql/data, либо где-то ещё, в зависимости от вашего дистрибутива. После изменений сервер необходимо перезапустить.

В openSUSE конфигурационные файлы создадутся после первого запуска сервера:

sudo /etc/init.d/postgresql start

После этого, они будут размещены в /var/lib/pgsql/data/postgresql.conf

Если вы используете версию старше 8.2 придётся использовать специфические числа вместо записи в естественных единицах измерения.

shared_buffers = 128MB    # 16384 для 8.1 и раньше

Так контролируется количество памяти, используемое для хранения таких вещей как страницы индекса и страницы данных прямо в локальном кэше. Больше - не всегда лучше. Помните, что osm2pgsql тоже требует много памяти, а часть памяти перманентно зарезервировано для PostgreSQL.

Если сервер не стартует после изменений, проверьте pgstartup.log на предмет ошибок превышения переменной ядра SHMMAX. Если они появляются, увеличьте значение переменной kernel.shmmax используя команду sysctl:

# увеличьте max shared memory до 256 мегабайт
sysctl -w kernel.shmmax=268435456

# для OS X Leopard и новее используйте строку ниже и добавьте kern.sysv.shmmax=268435456 в /etc/sysctl.conf
sudo sysctl -w kern.sysv.shmmax=268435456


Чтобы сделать это значение постоянным, отредактируйте /etc/sysctl.conf. Если вы используете технологию linux-vserver, пожалуйста установите shmmax отдельно для каждой гостевой системы. Если вы хотите настроить ядро, не забудьте почитать раздел Managing Kernel Resources в документации по PostgreSQL.


checkpoint_segments = 20

Значение по умолчанию слишком маленькое для массовых вставок. Это потребует больше дискового пространства, но сгладит нагрузку; немного зависит от вашей дисковой подсистемы. Оптимальное значение подбирается экспериментальным путём. Проверьте, есть ли в логах postgres следующее:

LOG:  checkpoints появляются слишком часто (28 seconds apart)
HINT:  попробуйте увеличить значение параметра "checkpoint_segments".

Для опытных пользователей: вы также можете настроить bgwriter для выравнивания производительности.

maintenance_work_mem = 256MB    # 256000 для 8.1 и раньше

Данная настройка задаёт количество памяти под создание индексов. Значение по умолчанию слишком мало для размера наших таблиц. Эта память освободится после завершения процесса, так что вам не нужно жадничать, как выше. Тем не менее, оставьте место для osm2pgsql.

work_mem = 256MB # 256000 для 8.1 и раньше

Данная настройка задаёт количество памяти под ORDER BY for which no index can be used. osm2pgsql предварительно сортирует некоторые таблицы перед построением их индексов, и значение по умолчанию для этой настройки опять-таки слишком мало. Все замечания относительно maintenance_work_mem выше так же касаются work_mem.

autovacuum = off

Auto-vacuuming подразумевает, что PostgreSQL будет чистить ваши данные. Это может замедлить запись и чтение. Если база данных больше ни для чего не используется, можете спокойно отключить autovacuuming.

Создание базы данных

Общее

Вместо <username> должно быть имя пользователся, который будет позже выполнять рендеринг.
На обычных домашних компьютерах я рекомендую использовать своего личного пользователя. Для этого замените ниже в командах "<username>" на "`whoami`" (в одинарных кавычках).

На большинстве систем вам нужно работать под супер пользователем PostgreSQL, чтобы выполнять команды ниже. Часто вы не сможете войти под этим пользователем. Вместо этого вы можете использовать команду вроде этой, от имени root:

# su - postgres
$ <команды...>

или

# sudo -u postgres <команда>

или, на системах типа Ubuntu, которые даже под root не позволяют работать

user@machine$ sudo -u postgres -i
postgres@machine$ <команды...>

Теперь, от имени пользователя postgres выполните следующее для установки базы данных:

$ createuser <username>
$ createdb -E UTF8 -O <username> gis
$ createlang plpgsql gis

Под Windows эти команды можно выполнить в Admin tool GUI, или запустить от имени Администратора сеанс командной строки, перейти в папку bin (например, C:\Program Files\PostgreSQL\8.3\bin) и выполнить:

C:\Program Files\PostgreSQL\8.3\bin\createuser -U postgres <username>
C:\Program Files\PostgreSQL\8.3\bin\createdb -U postgres -E UTF8 -O <username> gis
C:\Program Files\PostgreSQL\8.3\bin\createlang -U postgres plpgsql gis

Если потребуется, можно использовать команды 'dropdb gis' и 'dropuser <username>'. В частности, они пригодятся вам чтобы сделать пользователя администратором postgres (вам предложат это при создании пользователя), для поднятия привилегий.

openSUSE 11.2

Создайте пользователя в Postgresql, который будет использоваться для создания таблиц и данных. Затем нужно будет выполнить несколько SQL скриптов, содержащих жизненно необходимые инструкции, относящиеся к картографии. Эти инструкции создадут пользователя с текущим именем, под которым вы вошли в систему и паролем "something". Можете заменить все "`whoami`" и "something" на желаемые.

sudo su -c "createuser --superuser `whoami`" postgres
sudo su -c "createdb -E UTF8 -O `whoami` gis" postgres
sudo su -c "createlang plpgsql gis" postgres
echo "ALTER USER `whoami` WITH PASSWORD 'something';" | psql -d gis

Пожалуйста учтите: используя конфигурацию PostgreSQL по умолчанию в openSUSE 11.2, вы наверняка получите проблему: Mapnik#Authentication failed. Чтобы решить её, выполните приведённые здесь действия.

Поддержка Diff файлов (.osc)

Для поддержки ежедневных, ежечасных, и т.д. osc файлов, osm2pgsql требуется модуль intarray contrib. При его отсутствии, вы будете наблюдать следующее сообщение, когда возьмётесь наполнять базу через osm2pgsql:

 *** WARNING: intarray contrib module not installed
 *** The resulting database will not be usable for applying diffs.
Для Ubuntu
 $ sudo apt-get install postgresql-contrib-8.3

От имени пользователся postgres или вашего супер пользователя postgresql:

 $ psql -d gis -f /usr/share/postgresql/8.3/contrib/_int.sql
Для Fedora
 $ yum install postgresql-contrib

От имени пользователся postgres или вашего супер пользователя postgresql:

 $ psql -d gis -f /usr/share/pgsql/contrib/_int.sql
openSUSE 11.2

Выполните эту команду, зайдя под пользователем под которым вы создавали пользователя для PostgreSQL.

psql -d gis -f /usr/share/postgresql/contrib/_int.sql

PostGIS

Вам нужно активировать PostGIS в только что созданной базе данных.
Учтите, что lwpostgis.sql / lwpostgis-64.sql, встречающиеся ниже, называются postgis.sql / postgis-64.sql, начиная с PostGIS v1.4.
note: эти файлы также могут быть расположены в /usr/share/postgresql/8.4/contrib/

Для Debian Lenny (stable) и Ubuntu < 10.4

От имени пользователся postgres или вашего супер пользователя postgresql:

$ psql -d gis -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql
$ echo "ALTER TABLE geometry_columns OWNER TO <username>; ALTER TABLE spatial_ref_sys OWNER TO <username>;"  | psql -d gis
где <username> - имя пользователя, которого вы назначили владельцем базы данных gis.

при ошибках с lwpostgis.sql попробуйте

$ psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
Для Debian testing или unstable и Ubuntu 10.4

От имени пользователся postgres или вашего супер пользователя postgresql:

psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis.sql
echo "ALTER TABLE geometry_columns OWNER TO <username>; ALTER TABLE spatial_ref_sys OWNER TO <username>;"  | psql -d gis
где <username> - имя пользователя, которого вы назначили владельцем базы данных gis.
Для Ubuntu 11.04
psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
echo "ALTER TABLE geometry_columns OWNER TO <username>; ALTER TABLE spatial_ref_sys OWNER TO <username>;"  | psql -d gis
где <username> - имя пользователя, которого вы назначили владельцем базы данных gis.
Для Fedora

От имени пользователся postgres или вашего супер пользователя postgresql:

$ psql -d gis -f /usr/share/pgsql/contrib/lwpostgis.sql
$ psql -d gis -f osm2pgsql/900913.sql
$ echo "ALTER TABLE geometry_columns OWNER TO username; ALTER TABLE spatial_ref_sys OWNER TO username;"  | psql -d gis

Note: если путь выше не работает, можете использовать psql -d gis -f /usr/share/pgsql/contrib/lwpostgis-64.sql

Для Opensuse 11

Если вы не используете имя своего пользователя для пользователя в PostgreSQL, войдите как пользователь "postgres" и замените "`whoami`" ниже на имя, которое вы используете.

psql -d gis -f /usr/share/postgresql/contrib/postgis.sql
psql -d gis -f osm2pgsql/900913.sql
echo "ALTER TABLE geometry_columns OWNER TO `whoami`; ALTER TABLE spatial_ref_sys OWNER TO `whoami`;" | psql -d gis
Для Windows

Введите это в командной строке, запущенной от Администратора если у вас PostGIS 1.5:

C:\Program Files\PostgreSQL\8.4\bin\psql -U postgres -d gis -f "%ProgramFiles%\PostgreSQL\8.4\share\contrib\postgis-1.5\postgis.sql"

если у вас более ранняя версия PostGIS:

C:\Program Files\PostgreSQL\8.3\bin\psql -U postgres -d gis -f "%ProgramFiles%\PostgreSQL\8.3\share\contrib\lwpostgis.sql"

Возможные проблемы

could not access file "$libdir/postgis-1.5": No such file or directory

Такая ошибка выскакивает, когда установлены сразу postgresql-9.0 и postgresql-8.4 (Debian/testing). Помогает удаление 9.0, также вероятно поможет переключение активной версии набора инструментов.

См. также