Страшная
история
Кто бы мог
подумать, что настроить совместную
работу ArcGIS 10.1 с БД PostgreSQL
будет так непросто. Времени ушло
несколько часов, почти весь рабочий
день.
Не так давно
я уже рассказывал про грабли, разложенные
на пути тех, кто хочет связку
ArcGIS
10 + PostgreSQL,
но то были цветочки. Теперь ESRI продает
новую версию АркГИС — 10.1, в ней очень
много изменений, даже по сравнению с
10.
Короче,
ближе к телу. Мне понадобился ArcGIS
Server 10.1 и БД обеспечивающая
функциональность Feature
Service. В
качестве БД я выбрал PostgreSQL.
ArcGIS Server нынче
существует только в версии x64,
поэтому связка получилась такая
MS Windows
2008 x64; PostgreSQL 9.0.12 x64; ArcGIS Server 10.1 x64 +
Web Adapter + SP1.
Все 64-битные.
Поставил эту
троицу, читаю инструкцию по установке
SDE. Там написано:
Before you install
You must install a
database and create a geodatabase in it before you set up an ArcSDE
service. Use the Create Enterprise Geodatabase geoprocessing tool,
the Enable Enterprise Geodatabase geoprocessing tool, or a Python
script to create a geodatabase before installing the application
server and setting up a service. See the ArcGIS for Server or ArcGIS
for Desktop documentation for instructions on creating a geodatabase.
Я это понял
так, что перед установкой SDE мне надо
«создать геодатабазу» внутри PostgreSQL.
Для этого нужен либо ArcGIS Desktop либо некий
скрипт Python. Поскольку мне понадобится
потом ArcCatalog по любому, я решил, что
следующий шаг будет — установка ArcGIS
for Desktop.
ОК, установил
ArcGIS Desktop, запустил ArcCatalog, нашел Toolbox tool
«Create Enterprise Geodatabase».
Запускаю...
облом с
сообщением типа:
Executing:
CreateEnterpriseGeodatabase PostgreSQL localhost postgisdb
DATABASE_AUTH postgres ***** SDE_SCHEMA sde ***** sdetabspace
C:\ags101.ecp
error: Cannot
connect to database because the database client software
failed to load. Be sure the database client software is installed
and configured correctly.
Failed to execute
(CreateEnterpriseGeodatabase).
ArcCatalog не хватает
библиотек для работы с PostgreSQL. Недолгое
гугление выдало следующие статьи
Где написано,
где искать эти библиотеки:
You can obtain DBMS
client installations from the DBMS vendor or download them from the
Esri Customer Care portal.
Одна затыка,
на этот портал не пускают с обычной
учетной записью ESRI.
Ладно, еще
немного поисков и я знаю, о каких
библиотеках идет речь:
The files are
libeay32.dll, libintl.dll, libpq.dll, and ssleay32.dll
Эти файлы
нашлись в папке bin внутри
установленного PostgreSQL. Ну,
думаю, дело в шляпе. Скопировал их куда
надо — в папку bin внутре
установленного ArcGIS Desktop,
запускаю опять тулбокс...
Тот
же облом — не находит
клиентские либы.
На
этом этапе я потерял очень много времени
из-за ошибочного постулата by
default. Я пихал в ArcGIS
Desktop библиотеки из 64-битной
версии PostgreSQL, предполагая
по умолчанию, что раз уж у меня всё
64-битное, то и ArcGIS Desktop тоже 64-битный.
Авотфиг. ArcGIS Desktop вполне себе 32-битный
и библиотеки ему надо
тоже 32-битные.
Пришлось
на другой машине скачать PostgreSQL 9.0.12 уже
32-битный, поставить его и найти в нем
файлы libeay32.dll, libintl.dll, libpq.dll, and ssleay32.dll
Нашел,
скопировал, разместил в bin
ArcGIS Desktop, запускаю тулбокс...
Опять
облом. Вот тут я разозлился. Думаю,
матьвашузаногу, чего еще вам, уродам из
ESRI надо?
С ее помощью
я выяснил, от каких библиотек зависит
32-битная либа libpq.dll. Это оказались
libpq.dll
ssleay32.dll
libeay32.dll
libintl-8.dll
libiconv-2.dll
Видно разницу,
да? 5 файлов а не 4, как сказано в
документации. На этот раз, после
докладывания недостающего файла, тулбокс
сработал как положено.
Copy the st_geometry
library to the PostgreSQL installation directory.
The st_geometry.dll
file for use with PostgreSQL 9.0 can be found in the DatabaseSupport
directory of your ArcGIS client installation directory. Move the
st_geometry.dll file from the ArcGIS client to the PostgreSQL lib
directory on your PostgreSQL server.
То есть, взять
либу
c:\Program Files
(x86)\ArcGIS\Desktop10.1\DatabaseSupport\PostgreSQL\Windows64\st_geometry.dll
и положить ее
в папку
c:\Program
Files\PostgreSQL\9.0\lib\
Тут, пока свежа
память о поиске недостающих dll,
я сразу применил Dependency Walker. Оказалось
— не зря. Эта либа требует еще пачку:
msvcp90.dll
msvcr90.dll
msvcm90.dll
Microsoft.VC90.CRT.manifest
Благо, они
нашлись где-то внутре системы и не
пришлось их добывать из интернету.
Этот пакет я
закинул, на всякий случай, не только в
папку lib, но и в bin
внутри PostgreSQL.
Далее, после
того как создана геодатабаза, я сделал
коннект к БД в ArcCatalog. Как описано тут:
Попытался
скопировать данные слоя из файловой
GDB в PostgreSQL, используя этот коннект...
Обратно облом. Но на этот раз все оказалось
проще. В контекстном меню ArcCatalog для
этого коннекта нашелся пункт, забыл
точное название, что-то вроде «Enable
geodatabase» или вроде того. После его
применения геобаза в PostgreSQL стала доступна
для ArcCatalog и я смог скопировать в БД
нужные слои.
На этом у меня
кончился рабочий день и начались
водопроводные работы. Кран у меня на
кухне сломался, я его менял. Тоже не без
приключений.
Так что, про
ArcGIS 10.1 и PostgreSQL пока всё. Остальное, если
будет нетривиально, напишу позже.