Создание базы геоданных в PostgreSQL на Linux

Доступно с лицензией Standard или Advanced.

Чтобы создать базу геоданных в базе данных PostgreSQL, запустите инструмент геообработки или скрипт Python из клиентского приложения ArcGIS. Начните с чтения требований, а затем выполните действия, соответствующие вашей ситуации.

Этот раздел применим только к установке PostgreSQL на сервере Linux. Если PostgreSQL установлен на сервере Microsoft Windows, см. Создание базы геоданных в PostgreSQL на Windows.

Предварительные условия

Для создания базы геоданных в PostgreSQL необходимо выполнить следующее:

  1. Убедитесь в том, что используемые вами версии ArcGIS, PostgreSQL и операционной системы соответствуют требованиям.
  2. Получите файл ключей ArcGIS Server и поместите его в такое место, где он будет доступен для клиента ArcGIS, который будет использоваться для создания базы геоданных.
  3. Определите, кто будет создавать базу геоданных, так как это влияет на то, кто создавал базу данных и каким инструментом база данных создавалась. Используйте инструкции, подходящие для вашей ситуации.

Вы администратор PostgreSQL и базы геоданных.

Если вы играете роль администраторов базы данных и геоданных и, следовательно, знаете пароли обоих ролей учетных записей, вы можете использовать инструмент геообработки Создать многопользовательскую базу геоданных или скрипт Python для создания базы геоданных в PostgreSQL.

Инструмент Создать многопользовательскую базу геоданных облегчает настройку базы геоданных, поскольку создает объекты базы данных и предоставляет вам необходимые права. Для этого используются специальные настройки по умолчанию. Ниже описывается инструмент Создать многопользовательскую базу геоданных и используемые им настройки:

  • Он создает базу данных с помощью шаблона PostgreSQL по умолчанию (template1).

    Если вы хотите создать базу данных с помощью другого шаблона – например, использовать шаблон postgis – следует создать базу данных до запуска этого инструмента. Затем вы можете запустить инструмент Создать многопользовательскую базу геоданных или скрипт и указать имя предварительно созданной базы данных.

  • Он создаст роль учетной записи sde в базе данных и предоставит ей статус superuser.

    Пользователь sde должен иметь статус superuser для создания базы геоданных.

  • Он создает схему sde в базе данных.

    Системные таблицы базы геоданных, представления, функции и процедуры хранятся в схеме sde.

  • Он задает пользователя sde как владельца схемы sde и предоставляет в схеме sde права usage для роли public.

    Роли учетных записей, которые будут работать с базой геоданных, должны иметь доступ к схеме sde. Поскольку роли учетных записей базы геоданных скорее всего еще отсутствуют, инструмент предоставляет право usage для public. После создания базы геоданных, вы можете повысить защищенность базы геоданных, отозвав в схеме sde право usage у public, и предоставив usage только тем ролям и группам, которым требуется доступ к базе геоданных.

  • Он создает базу геоданных.

Сначала необходимо установить PostgreSQL и настроить кластер базы данных.

Установка и конфигурация PostgreSQL

Выполните эти шаги, чтобы настроить кластер базы данных PostgreSQL для хранения базы геоданных на сервере Linux:

  1. Установите поддерживаемую версию PostgreSQL и настройте кластер базы данных.

    Вы можете загрузить пакет установки PostgreSQL с My Esri. Если вы воспользуетесь этим пакетом установки, вам не понадобятся другие настройки, отличающиеся от настроек по умолчанию, для использования PostgreSQL с ArcGIS. Необходимо только убедиться, что выбраны правильные языковые настройки и параметры местоположения, если вы не используете эти параметры, заданные по умолчанию. Файлы для установки PostgreSQL можно также получить самостоятельно.

    Инструкции по установке и настройке PostgreSQL находятся в документации по PostgreSQL.

  2. Настройте кластер базы данных на прием подключений.

    Измените файл pg_hba.conf, чтобы кластер базы данных разрешил прием удаленных подключений.

  3. Установите следующие переменные среды для пользователя postgres, если они еще не установлены:

    • PGDATA: должен быть задан в процессе установки PostgreSQL. Если нет, задайте его в соответствии с расположением директории data PostgreSQL. (Она находится в установочной директории PostgreSQL.)
    • LD_LIBRARY_PATH: установите переменную LD_LIBRARY_PATH в директории PostgreSQL lib. Местоположение директории lib меняется в зависимости от способа установки PostgreSQL. Чтобы определить корректное местоположение установки PostgreSQL, выполните команду pg_config в качестве пользователя postgres. Установите для LD_LIBRARY_PATH значение, которое было получено для PKGLIBDIR.
    • PATH: переменная PATH должна содержать postgresql/bin.

  4. Создайте табличное пространство в кластере базы данных, в которой будет храниться ваша база данных. Если табличное пространство не создано, будет использовано пространство pg_default.

Затем установите и настройте клиента ArcGIS.

Установка клиента ArcGIS

Вы можете установить ArcGIS Desktop (Desktop Standard или Desktop Advanced) или ArcGIS Server (многопользовательскую версию) и запустить скрипт Python, чтобы создать базу геоданных. Если вы хотите запустить инструмент геообработки Создать многопользовательскую базу геоданных вместо скрипта, установите ArcGIS Desktop.

Примечание:

Вам потребуется файл ключей ArcGIS Server (enterprise) для авторизации вашей базы геоданных в следующем разделе. Даже если вы не запускаете скрипт Python с компьютера ArcGIS Server для создания базы геоданных, вы должны установить и авторизовать ArcGIS Server для того, чтобы получить файл ключей. Может потребоваться скопировать файл с ключами с ArcGIS Server в директорию, к которой есть доступ у инструмента геообработки Создать многопользовательскую базу геоданных.

ArcGIS Desktop поддерживается только ОС Windows, следовательно должен устанавливаться на другой компьютер, не на компьютер с PostgreSQL. Вы можете установить ArcGIS Server на тот же компьютер, что и PostgreSQL; однако поскольку СУБД интенсивно использует память, это не рекомендуется.

  1. Установите клиента ArcGIS, из которого вы будете создавать базу геоданных.

    Обычно база геоданных создается из директории установки ArcGIS Server или ArcGIS Desktop (Standard или Advanced).

  2. Если вы будете использовать ArcGIS Server с базой геоданных на PostgreSQL, задайте или отредактируйте следующие переменные для учетной записи ArcGIS:

    • SDEHOME: задайте для этой переменной значение в соответствии с директорией установки ArcGIS Server.

      Например, если ArcGIS Server установлен в папку по умолчанию на Linux, задайте export SDEHOME=/home/ags/arcgis/server.

    • PG_HOME: Установить для PG_HOME значение /opt/PostgreSQL/<version>.

      В этом примере PG_HOME ссылается на версию PostgreSQL 11.2: export PG_HOME=/opt/PostgreSQL/11.2.

    • Если ArcGIS Server установлен на сервере Windows, добавьте к переменной PATH значения PG_HOME\bin и SDEHOME\bin.

      Например, на Linux задайте export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin.

    • Если ArcGIS Server установлен на Linux, добавьте к переменной LD_LIBRARY_PATH значения $PG_HOME/lib и $SDEHOME/lib.

      Например, задайте export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PG_HOME/lib:$SDEHOME/lib.

Теперь, когда ArcGIS установлен, и у вас есть доступ к файлу st_geometry.so, который нужно разместить на сервере PostgreSQL.

Размещение файла st_geometry.so

Перед созданием базы геоданных необходимо поместить файл st_geometry.so в директорию PostgreSQL lib. Местоположение директории lib на Linux меняется в зависимости от способа установки PostgreSQL. Чтобы определить корректное местоположение установки PostgreSQL, выполните команду pg_config в качестве пользователя postgres. Значение, возвращаемое для PKGLIBDIR, является папкой lib, в которую необходимо поместить библиотеку st_geometry.

Вы можете получить файл st_geometry.so от My Esri или из пакета установки ArcGIS Server. В следующей таблице указано, где в папке установки клиента ArcGIS найти каждую версию библиотеки st_geometry.so.

Версия PostgreSQLДиректория установки клиента ArcGIS

PostgreSQL 9.6.x

DatabaseSupport/PostgreSQL/9.6/Linux64

PostgreSQL 10.x

DatabaseSupport/PostgreSQL/10/Linux64

PostgreSQL 11.x

DatabaseSupport/PostgreSQL/11/Linux64

PostgreSQL 12.x (только 10.8.1 и ArcGIS Pro 2.6)

DatabaseSupport/PostgreSQL/12/Linux64

Внимание:

Директория ArcGIS Server DatabaseSupport создается с правами уровня 700. Если вы используете файл, установленный вместе с ArcGIS Server, измените права на этот файл на 755, при входе от имени root, для перемещения файла st_geometry.so в директорию PostgreSQL lib. Если этого не сделать, пользователь sde не сможет получить доступ к нему для создания базы геоданных.

Как пользователь root, поместите файл библиотеки st_geometry.so, относящийся к используемой вами версии PostgreSQL, в директорию PostgreSQL lib. Если соответствующая библиотека st_geometry.so не будет помещена в PostgreSQL lib, вы не сможете создать базу геоданных.

Кластер базы данных и клиент ArcGIS теперь готовы для создания базы геоданных.

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

Вы можете либо запустить инструмент геообработки Создать многопользовательскую базу геоданных из ArcGIS Desktop (Desktop Standard или Desktop Advanced), либо запустить скрипт Python из ArcGIS Desktop (Desktop Standard или Desktop Advanced), ArcGIS Server (многопользовательская версия), чтобы создать базу геоданных.

Запуск инструмента Создать многопользовательскую базу геоданных

Если у вас есть доступ к ArcGIS Desktop, для создания базы геоданных вы можете запустить инструмент геообработки.

Следуйте приведенным шагам по созданию базы геоданных с помощью инструмента Создать многопользовательскую базу геоданных в ArcGIS Pro:

  1. Запустите ArcGIS Pro.
  2. Откройте инструмент Создать многопользовательскую базу геоданных.

    Этот инструмент вы найдете в группе инструментов Администрирование баз геоданных набора инструментов Управление данными.

  3. В раскрывающемся списке Платформа базы данных выберите PostgreSQL.
  4. Введите имя сервера PostgreSQL в поле Экземпляр.
  5. В поле База данных введите имя базы данных, которую вы хотите создать для хранения базы геоданных.
    Примечание:

    Введите имя базы данных в нижнем регистре, использование верхнего или смешанного регистра в базах геоданных на PostgreSQL не поддерживается. Если имя базы данных вводится в верхнем или смешанном регистре, ArcGIS конвертирует его в нижний регистр.

  6. Необходимо подключиться к кластеру базы данных как суперпользователь postgres, чтобы создать базу данных и другие объекты, поэтому, в поле Администратор базы данных по умолчанию указано имя postgres. Если суперпользователь postgres имеет другое имя, введите его в поле Администратор базы данных.
  7. Введите пароль для суперпользователя postgres в поле Пароль администратора базы данных.
  8. Администратор базы геоданных в PostgreSQL должен использовать имя sde; поэтому в поле Администратор базы геоданных уже указано sde.
  9. Введите пароль пользователя sde в поле Пароль администратора базы геоданных.

    Если пользователь sde уже есть в кластере базы данных, введите пароль этого пользователя, и схема sde будет создана в базе данных. Если пользователь sde еще не создан, пользователь с именем sde и заданным вами паролем будет создан в кластере базы данных, а в базе данных будет создана соответствующая схема. Разрешение usage в схеме sde задается для группы public.

    Подсказка:

    Если после создания базы геоданных, вы хотите сделать схему более защищенной, можно отозвать usage у роли public, создать новую роль, присвоить usage этой роли в схеме sde, а затем предоставить групповую роль всем подключающимся ролям, которым необходим доступ к базе геоданных.

  10. Если у вас имеется предварительно настроенная табличная область, которую вы хотите использовать как табличную область для базы данных по умолчанию, введите имя этой области в поле Имя табличной области.

    Этот инструмент не создает табличное пространство; необходимо либо задать имеющееся, либо оставить это поле пустым. Если вы не указали табличное пространство, база данных будет создана в пространстве pg_default.

  11. Чтобы указать Файл авторизации, выберите файл keycodes, который был создан при авторизации ArcGIS Server Enterprise.

    Этот файл записывается в папку \\Program Files\ESRI\License<release#>\sysgen на серверах Windows и в папку /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen в Linux. Скопируйте этот файл в местоположение, доступное для того клиента, из которого вы создаете базу геоданных. Если данная процедура еще не выполнена, авторизуйте ArcGIS Server сейчас для создания этого файла.

  12. Щелкните Запустить.

    Вы можете найти сообщения, относящиеся к созданию базы геоданных, в файле sde_setup.log, который создается в каталоге, указанном для переменной %TEMP%, на том компьютере, где запущен инструмент. При наличии проблем с созданием базы геоданных изучите этот файл журнала для их устранения.

Теперь у вас есть база геоданных в PostgreSQL.

Затем вы можете создать пользователя, который будет загружать данные в базу геоданных.

Запустите скрипт Python

Вы можете скопировать, сохранить и запустить указанный здесь скрипт для создания базы геоданных из ArcGIS Desktop (Desktop Standard или Desktop Advanced) или ArcGIS Server (enterprise).

  1. Создайте текстовый файл на клиентском компьютере ArcGIS и скопируйте следующий скрипт в файл.
    """
    Name: create_enterprise_gdb.py
    Description: Provide connection information to a DBMS instance and create an enterprise geodatabase.
    Type  create_enterprise_gdb.py -h or create_enterprise_gdb.py --help for usage
    """
    
    # Import system modules
    import arcpy
    import os
    import optparse
    import sys
    
    
    # Define usage and version
    parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 1.0 for " + arcpy.GetInstallInfo()['Version'] )
    
    #Define help and options
    parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQL_SERVER', 'ORACLE', 'POSTGRESQL', ''], default="", help="Type of enterprise DBMS:  SQL_SERVER, ORACLE, or POSTGRESQL.")                   
    parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name")
    parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name:  Do not specify for Oracle")
    parser.add_option ("--auth", dest="Account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive):  DATABASE_AUTH, OPERATING_SYSTEM_AUTH.  Default=DATABASE_AUTH")
    parser.add_option ("-U", dest="Dbms_admin", type="string", default="", help="DBMS administrator user")
    parser.add_option ("-P", dest="Dbms_admin_pwd", type="string", default="", help="DBMS administrator password")
    parser.add_option ("--schema", dest="Schema_type", type="choice", choices=['SDE_SCHEMA', 'DBO_SCHEMA'], default="SDE_SCHEMA", help="Schema type  applies to geodatabases in SQL Server only. Type SDE_SCHEMA to create geodatabase in SDE schema or type DBO_SCHEMA to create geodatabase in DBO schema. Default=SDE_SCHEMA")
    parser.add_option ("-u", dest="Gdb_admin", type="string", default="", help="Geodatabase administrator user name; Must always be sde for PostgreSQL, sde-schema geodatabases in SQL Server, and sde geodatabase in Oracle")
    parser.add_option ("-p", dest="Gdb_admin_pwd", type="string", default="", help="Geodatabase administrator password")
    parser.add_option ("-t", dest="Tablespace", type="string", default="", help="Tablespace name; For PostgreSQL, type name of existing tablespace in which to store database. If no tablespace name specified, pg_default is used. For Oracle, type name of existing tablespace, or, if tablespace with specified name does not exist, it will be created and set as the default tablespace for the sde user. If no tablespace name is specified, SDE_TBS tablespace is created and set as sde user default. Tablespace name not supported for SQL Server.")
    parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file; file created when ArcGIS Server Enterprise authorized, and stored in \\Program Files\ESRI\License<release#>\sysgen on Windows or /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen on Linux")
    # Check if value entered for option
    try:
    	(options, args) = parser.parse_args()
    
    	
    	#Check if no system arguments (options) entered
    	if len(sys.argv) == 1:
    		print("%s: error: %s\n" % (sys.argv[0], "No command options given"))
    		parser.print_help()
    		sys.exit(3)
    
    	#Usage parameters for spatial database connection
    	database_type = options.Database_type.upper()
    	instance = options.Instance
    	database = options.Database.lower()	
    	account_authentication = options.Account_authentication.upper()
    	dbms_admin = options.Dbms_admin
    	dbms_admin_pwd = options.Dbms_admin_pwd
    	schema_type = options.Schema_type.upper()
    	gdb_admin = options.Gdb_admin
    	gdb_admin_pwd = options.Gdb_admin_pwd	
    	tablespace = options.Tablespace
    	license = options.Authorization_file
    
    	
    	if( database_type ==""):	
    		print(" \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified."))
    		parser.print_help()
    		sys.exit(3)		
    		
    	if (license == ""):
    		print(" \n%s: error: \n%s\n" % (sys.argv[0], "Authorization file (-l) must be specified."))
    		parser.print_help()
    		sys.exit(3)			
    	
    	if(database_type == "SQL_SERVER"):
    		if(schema_type == "SDE_SCHEMA" and gdb_admin.lower() != "sde"):
    			print("\n%s: error: %s\n" % (sys.argv[0], "To create SDE schema on SQL Server, geodatabase administrator must be SDE."))
    			sys.exit(3)
    		if (schema_type == "DBO_SCHEMA" and gdb_admin != ""):
    			print("\nWarning: %s\n" % ("Ignoring geodatabase administrator specified when creating DBO schema..."))
    		if( account_authentication == "DATABASE_AUTH" and dbms_admin == ""):
    			print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified with database authentication"))
    			sys.exit(3)
    		if( account_authentication == "OPERATING_SYSTEM_AUTH" and dbms_admin != ""):
    			print("\nWarning: %s\n" % ("Ignoring DBMS administrator specified when using operating system authentication..."))
    	else:
    		if (schema_type == "DBO_SCHEMA"):
    			print("\nWarning: %s %s, %s\n" % ("Only SDE schema is supported on", database_type, "switching to SDE schema..." ))
    			
    		if( gdb_admin.lower() == ""):
    			print("\n%s: error: %s\n" % (sys.argv[0], "Geodatabase administrator must be specified."))
    			sys.exit(3)
    
    		if( gdb_admin.lower() != "sde"):
    			if (database_type == "ORACLE"):
    				print("\nGeodatabase admin user is not SDE, creating user schema geodatabase on Oracle...\n")
    			else:
    				print("\n%s: error: %s for %s.\n" % (sys.argv[0], "Geodatabase administrator must be SDE", database_type))
    				sys.exit(3)
    			
    		if( dbms_admin == ""):
    			print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified!"))
    			sys.exit(3)
    
    		if (account_authentication == "OPERATING_SYSTEM_AUTH"):
    			print("Warning: %s %s, %s\n" % ("Only database authentication is supported on", database_type, "switching to database authentication..." ))
    
    	# Get the current product license
    	product_license=arcpy.ProductInfo()
    	
    	
    	# Checks required license level
    	if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
    		print("\n" + product_license + " license found!" + " Creating an enterprise geodatabase requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license.")
    		sys.exit("Re-authorize ArcGIS before creating enterprise geodatabase.")
    	else:
    		print("\n" + product_license + " license available!  Continuing to create...")
    		arcpy.AddMessage("+++++++++")
    	
    	
    	try:
    		print("Creating enterprise geodatabase...\n")
    		arcpy.CreateEnterpriseGeodatabase_management(database_platform=database_type,instance_name=instance, database_name=database, account_authentication=account_authentication, database_admin=dbms_admin, database_admin_password=dbms_admin_pwd, sde_schema=schema_type, gdb_admin_name=gdb_admin, gdb_admin_password=gdb_admin_pwd, tablespace_name=tablespace, authorization_file=license)
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    		arcpy.AddMessage("+++++++++\n")
    	except:
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    			
    #Check if no value entered for option	
    except SystemExit as e:
    	if e.code == 2:
    		parser.usage = ""
    		print("\n")
    		parser.print_help()   
    		parser.exit(2)
  2. Сохраните файл с расширением .py.
  3. Запустите скрипт, предоставив специфичные для вашего сайта опции и информацию.

    В следующем примере запуск выполняется с компьютера с Linux, файл create_gdb.py запускается для кластера базы данных pgprod, с пользователем postgres уровня superuser, с паролем N0pe3king!. Он создает базу данных entgdb в табличном пространстве gis, и создает роль учетной записи sde с паролем Tgdbst@rtsh3r3. Для авторизации базы геоданных в местоположении ArcGIS Server по умолчанию задаётся файл ключей.

    ./create_gdb.py --DBMS POSTGRESQL -i pgprod -D entgdb --auth DATABASE_AUTH 
    -U postgres -P N0pe3king! -u sde -p Tgdbst@rtsh3r3 -t gis -l '/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes'

    В этом примере тот же скрипт запускается на компьютере с Windows:

    create_gdb.py --DBMS POSTGRESQL -i pgprod -D entgdb --auth DATABASE_AUTH 
    -U postgres -P N0pe3king! -u sde -p Tgdbst@rtsh3r3 -t gis -l '\\Program Files\ESRI\License\sysgen\keycodes'
    Подсказка:

    Type -h or --help at the command prompt to get syntax help.

Теперь у вас есть база геоданных в PostgreSQL.

Вы можете найти сообщения, относящиеся к созданию базы геоданных, в файле sde_setup.log, который создается в каталоге, указанном для переменной TEMP или TMP, на том компьютере, где запущен этот скрипт. При наличии проблем с созданием базы геоданных изучите этот файл журнала для их устранения.

Затем вы можете создать пользователя, который будет загружать данные в базу геоданных.

Администратор PostgreSQL создает базу данных; администратор базы геоданных создает базу геоданных

Если пользователь, создающий базу геоданных, не имеет доступа к паролю администратора базы данных (superuser postgres), то администратор базы данных может настроить базу данных, затем администратор базы геоданных может подключиться с ней, используя роль учетной записи sde и создать базу геоданных с помощью инструмента геообработки Включить многопользовательскую базу геоданных или скрипта Python.

Инструмент Включить многопользовательскую базу геоданных использует файл подключения к базе данных и создает системные таблицы базы геоданных, представления, функции и процедуры в схеме sde. Перед запуском инструмента администратор базы данных должен настроить в кластере PostgreSQL следующее:

  • Роль учетной записи с именем sde со статусом superuser
  • Базу данных
  • Схему sde в базе данных, принадлежащую роли sde
  • Библиотека st_geometry должна быть в папке установки PostgreSQL

Помните, что все имена объектов базы данных должны использовать только символы нижнего регистра.

Установка и настройка PostgreSQL и библиотеки st_geometry

Сначала, администратор базы данных должен подготовить PostgreSQL для хранения базы геоданных.

Для настройки кластера базы данных PostgreSQL на сервере Linux администратор базы данных должен выполнить следующие инструкции. Помните, что все имена объектов базы данных (база данных, схема и роли учетных записей) должны использовать только символы нижнего регистра.

  1. Установите поддерживаемую версию PostgreSQL и настройте кластер базы данных.

    Вы можете загрузить пакет установки PostgreSQL с My Esri. Если вы воспользуетесь этим пакетом установки, вам не понадобятся другие настройки, отличающиеся от настроек по умолчанию, для использования PostgreSQL с ArcGIS. Необходимо только убедиться, что выбраны правильные языковые настройки и параметры местоположения, если вы не используете эти параметры, заданные по умолчанию. Файлы для установки PostgreSQL можно также получить самостоятельно.

    Инструкции по установке и настройке PostgreSQL находятся в документации по PostgreSQL.

  2. Настройте кластер базы данных на прием подключений.

    Измените файл pg_hba.conf, чтобы кластер базы данных разрешил прием удаленных подключений.

  3. Установите следующие переменные среды для пользователя postgres, если они еще не установлены:

    • PGDATA: должен быть задан в процессе установки PostgreSQL. Если нет, задайте его в соответствии с расположением директории data PostgreSQL. (Она находится в установочной директории PostgreSQL.)
    • LD_LIBRARY_PATH: установите переменную LD_LIBRARY_PATH в директории PostgreSQL lib. Местоположение директории lib меняется в зависимости от способа установки PostgreSQL. Чтобы определить корректное местоположение установки PostgreSQL, выполните команду pg_config в качестве пользователя postgres. Установите для LD_LIBRARY_PATH значение, которое было получено для PKGLIBDIR.
    • PATH: переменная PATH должна содержать postgresql/bin.

  4. Дополнительно вы можете создать табличное пространство в кластере базы данных, в которой будет храниться ваша база данных.
  5. Создайте роль учетной записи с именем sde со статусом superuser:

    Подсказка:

    Если администратор базы геоданных не будет удалять подключения к базе данных, можно отозвать статус superuser у роли sde после создания базы геоданных.

  6. Создайте базу данных для хранения базы геоданных.
  7. Создайте схему с именем sde в базе данных и убедитесь, что роль учетной записи sde и имеет в ней все права.
  8. Необходимо также поместить файл библиотеки st_geometry.so в папку PostgreSQL lib. Вы можете скачать файл st_geometry.so из My Esri. Убедитесь, что вы загружаете правильную библиотеку для используемой вами версии PostgreSQL. Если вы используете неправильную библиотеку, создание базы геоданных не удастся.

    Когда вы получите корректный файл st_geometry.so, поместите его в папку PostgreSQL lib, войдя как пользователь root. Помните, что местоположение директории lib на Linux может меняться в зависимости от способа установки PostgreSQL. Чтобы определить корректное местоположение установки PostgreSQL, выполните команду pg_config в качестве пользователя postgres. Значение, возвращаемое для PKGLIBDIR, является папкой lib, в которую необходимо поместить библиотеку st_geometry.

  9. Убедитесь, что права доступа к файлу st_geometry.so установлены на 755. Если это не сделано, пользователь sde не сможет получить доступ к библиотеке и создать базу геоданных.
  10. Предоставьте администратору базы геоданных информацию о подключении к базе данных.

    Администратор базы геоданных должен знать имя кластера базы данных, имя базы данных и пароль роли sde.

Теперь, когда база данных создана и настроена, администратор базы геоданных может подготовить клиента ArcGIS и создать базу геоданных.

Установка клиента ArcGIS

Для подготовки клиента ArcGIS и создания базы геоданных администратор базы геоданных должен выполнить следующие шаги:

  1. Установите клиента ArcGIS, из которого вы будете создавать базу геоданных.

    Обычно база геоданных создается из экземпляра ArcGIS Server или ArcGIS Desktop (Desktop Standard или Desktop Advanced).

  2. Если вы будете использовать ArcGIS Server с базой геоданных на PostgreSQL, задайте или отредактируйте следующие переменные для учетной записи ArcGIS:

    • SDEHOME: задайте для этой переменной значение в соответствии с директорией установки ArcGIS Server.

      Например, если ArcGIS Server установлен в папку по умолчанию на Linux, задайте export SDEHOME=/home/ags/arcgis/server.

    • PG_HOME: Установить для PG_HOME значение /opt/PostgreSQL/<version>.

      В этом примере PG_HOME ссылается на версию PostgreSQL 10.3: export PG_HOME=/opt/PostgreSQL/10.3.

    • Если ArcGIS Server установлен на сервере Windows, добавьте к переменной PATH значения PG_HOME\bin и SDEHOME\bin.

      Например, на Linux задайте export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin.

    • Если ArcGIS Server установлен на Linux, добавьте к переменной LD_LIBRARY_PATH значения $PG_HOME/lib и $SDEHOME/lib.

      Например, задайте export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PG_HOME/lib:$SDEHOME/lib.

Клиент ArcGIS теперь готов подключиться к базе данных и создать базу геоданных.

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

Администратор базы геоданных может запустить либо инструмент Включить многопользовательскую базу геоданных из ArcGIS Desktop (Desktop Standard или Desktop Advanced), либо скрипт Python из ArcGIS Desktop, ArcGIS Server для создания базы геоданных в имеющейся базе данных.

Запуск инструмента Включить многопользовательскую базу геоданных

Если у вас есть доступ к ArcGIS Desktop, для создания базы геоданных вы можете запустить инструмент геообработки.

Следуйте приведенным шагам по созданию базы геоданных с помощью инструмента Включить многопользовательскую базу геоданных в ArcGIS Pro

  1. Запустите ArcGIS Pro.
  2. Подключение к базе данных PostgreSQLв качестве пользователя sde.

    Убедитесь в том, что в диалоговом окне Подключение базы данных сохранен пароль пользователя sde.

  3. Откройте инструмент Включить многопользовательскую базу геоданных.
  4. Перетащите ваш новый файл подключения в поле Входная база данных.
  5. Перейдите к файлу авторизации ArcGIS Server, который был создан при авторизации ArcGIS Server, и добавьте его в текстовое поле Файл авторизации.

    При использовании мастера для авторизации ArcGIS Server файл ключей записывается на сервер, где установлено программное обеспечение. Если вы авторизовали ArcGIS Server на компьютере с Linux, файл ключей был создан в /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release>/sysgen. Если вы авторизовали на сервере Windows, то файл был создан в Program Files\ESRI\License<release>\sysgen. Если данная процедура еще не выполнена, авторизуйте ArcGIS Server для создания этого файла.

  6. Щелкните Запустить.

В базе данных создается база геоданных.

Вы можете найти сообщения, относящиеся к созданию базы геоданных, в файле sde_setup.log, который создается в каталоге, указанном для переменной %TEMP%, на том компьютере, где запущен инструмент. При наличии проблем с созданием базы геоданных изучите этот файл журнала для их устранения.

Далее, администратор может создать роли учетных записей в базе данных.

Запустите скрипт Python

Если вы хотите создать базу геоданных, запустив скрипт из ArcGIS Server или ArcGIS Desktop (Desktop Standard или Desktop Advanced), то можно использовать скрипт приведенный здесь.

  1. Создайте текстовый файл на клиентском компьютере ArcGIS и скопируйте следующий скрипт в файл.

    """
    Name: enable_enterprise_gdb.py
    Description: Provide connection information to an enterprise database
    and enable enterprise geodatabase.
    Type enable_enterprise_gdb.py -h or enable_enterprise_gdb.py --help for usage
    """
    
    # Import system modules
    import arcpy, os, optparse, sys
    
    
    # Define usage and version
    parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 1.0 for " + arcpy.GetInstallInfo()['Version'] )
    
    #Define help and options
    parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQL_SERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS', ''], default="", help="Type of enterprise DBMS:  SQL_SERVER, ORACLE, POSTGRESQL, DB2, INFORMIX, or DB2ZOS.")
    parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name")
    parser.add_option ("--auth", dest="account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive):  DATABASE_AUTH, OPERATING_SYSTEM_AUTH.  Default=DATABASE_AUTH")
    parser.add_option ("-u", dest="User", type="string", default="", help="Geodatabase administrator user name")
    parser.add_option ("-p", dest="Password", type="string", default="", help="Geodatabase  administrator password")
    parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
    parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file")
    
    
    # Check if value entered for option
    try:
    	(options, args) = parser.parse_args()
    
    	
    #Check if no system arguments (options) entered
    	if len(sys.argv) == 1:
    		print "%s: error: %s\n" % (sys.argv[0], "No command options given")
    		parser.print_help()
    		sys.exit(3)
    	
    
    	#Usage parameters for spatial database connection
    	database_type = options.Database_type.upper()
    	instance = options.Instance
    	account_authentication = options.account_authentication.upper()
    	username = options.User.lower() 
    	password = options.Password	
    	database = options.Database.lower()
    	license = options.Authorization_file
    
    
    	if( database_type ==""):	
    		print " \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified.")
    		parser.print_help()
    		sys.exit(3)		
    		
    	if (license == ""):
    		print " \n%s: error: \n%s\n" % (sys.argv[0], "Authorization file (-l) must be specified.")
    		parser.print_help()
    		sys.exit(3)
    
    		
    	# Get the current product license
    	product_license=arcpy.ProductInfo()
    	
    	if (license == ""):
    		print " \n%s: error: %s\n" % (sys.argv[0], "Authorization file (-l) must be specified.")
    		parser.print_help()
    		sys.exit(3)
    	
    	# Checks required license level
    	if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
    		print "\n" + product_license + " license found!" + "  Enabling enterprise geodatabase functionality requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license."
    		sys.exit("Re-authorize ArcGIS before enabling an enterprise geodatabase.")
    	else:
    		print "\n" + product_license + " license available!  Continuing to enable..."
    		arcpy.AddMessage("+++++++++")
    	
    	# Local variables
    	instance_temp = instance.replace("\\","_")
    	instance_temp = instance_temp.replace("/","_")
    	instance_temp = instance_temp.replace(":","_")
    	Conn_File_NameT = instance_temp + "_" + database + "_" + username    
    	
    	if os.environ.get("TEMP") == None:
    		temp = "c:\\temp"	
    	else:
    		temp = os.environ.get("TEMP")
    	
    	if os.environ.get("TMP") == None:
    		temp = "/usr/tmp"		
    	else:
    		temp = os.environ.get("TMP")  
    	
    
    	Connection_File_Name = Conn_File_NameT + ".sde"
    	Connection_File_Name_full_path = temp + os.sep + Conn_File_NameT + ".sde"
    	
    	# Check for the .sde file and delete it if present
    	arcpy.env.overwriteOutput=True
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    	
    	print "\nCreating Database Connection File...\n"	
    	# Process: Create Database Connection File...
    	# Usage:  out_file_location, out_file_name, DBMS_TYPE, instnace, database, account_authentication, username, password, save_username_password(must be true)
    	arcpy.CreateDatabaseConnection_management(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=username, password=password, save_user_pass="TRUE")
            for i in range(arcpy.GetMessageCount()):
    		if "000565" in arcpy.GetMessage(i):   #Check if database connection was successful
    			arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("\n+++++++++")
    			arcpy.AddMessage("Exiting!!")
    			arcpy.AddMessage("+++++++++\n")
    			sys.exit(3)            
    		else:
    			arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("+++++++++\n")
    	
    	
    	# Process: Enable geodatabase...
    	try:
    		print "Enabling Enterprise Geodatabase...\n"
    		arcpy.EnableEnterpriseGeodatabase_management(input_database=Connection_File_Name_full_path, authorization_file=license)
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    		arcpy.AddMessage("+++++++++\n")
    	except:
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    			
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    			
    #Check if no value entered for option	
    except SystemExit as e:
    	if e.code == 2:
    		parser.usage = ""
    		print "\n"
    		parser.print_help() 
    		parser.exit(2)

  2. Сохраните файл с расширением .py.
  3. Запустите скрипт, предоставив специфичные для вашего сайта опции и информацию.

    В следующем примере файл enable_gdb.py запускается для базы данных spdata на кластере pgprod. Подключение выполняется для учётной записи sde с паролем Tgdbst@rtsh3r3. Для авторизации базы геоданных в местоположении для ArcGIS Server по умолчанию задается файл ключей.

    ./enable_gdb.py --DBMS POSTGRESQL -i pgprod --auth DATABASE_AUTH 
    -u sde -p Tgdbst@rtsh3r3 -D spdata -l '/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes'
    Подсказка:

    Type -h or --help at the command prompt to get syntax help.

Теперь у вас есть база геоданных в PostgreSQL.

Вы можете найти сообщения, относящиеся к созданию базы геоданных, в файле sde_setup.log, который создается в каталоге, указанном для переменной TEMP или TMP, на том компьютере, где запущен скрипт. При наличии проблем с созданием базы геоданных изучите этот файл журнала для их устранения.

Далее, администратор может создать роли учетных записей в базе данных.