RU:PostGIS/Installation
Исходная статья: Mapnik/PostGIS. Вы можете закончить перевод.
Если вы знаете английский, то можете помочь нам, переведя часть оригинальной статьи. Общие сведения о переводе статей на русский язык можно найти здесь.
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)
Если вы используете osm2pgsql версии 0.80 и выше, пожалуйста, игнорируйте здесь всё, что касается intarray. Данная версия osm2pgsql не требует intarray. Более того, если вы его активируете, это приведёт к отказу. |
Для поддержки ежедневных, ежечасных, и т.д. 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, также вероятно поможет переключение активной версии набора инструментов.