Crear una geodatabase en PostgreSQL o Linux

Disponible con una licencia Standard o Advanced.

Para crear una geodatabase en una base de datos de PostgreSQL, ejecute una herramienta de geoprocesamiento o un script de Python desde un cliente de ArcGIS. Comience por leer los requisitos previos y, a continuación, siga las instrucciones que se corresponden con su situación.

Tenga en cuenta que este tema está relacionado con instalaciones de PostgreSQL en un servidor de Linux. Si tiene instalado PostgreSQL en un servidor Microsoft Windows, consulte Crear una geodatabase en PostgreSQL en Windows.

Requisitos previos

Para crear una geodatabase en PostgreSQL, realice lo siguiente:

  1. Confirme que la combinación de ArcGIS, PostgreSQL y el sistema operativo que desea usar sea compatible.
  2. Obtenga un archivo de códigos clave de ArcGIS Server y ubíquelo en una ubicación a la que pueda acceder desde el cliente de ArcGIS que vaya a usar para crear la geodatabase.
  3. Determine quién creará la geodatabase, ya que influye en quién crea la base de datos y qué herramienta ejecuta para crear la geodatabase. Siga las instrucciones que se corresponden con su situación:

Usted es el administrador de PostgreSQL y de la geodatabase

Si desempeña el rol tanto de administrador de base de datos como de administrador de la geodatabase y, por lo tanto, conoce la contraseña de ambos roles de inicio de sesión, puede usar la herramienta de geoprocesamiento Crear geodatabase corporativa o un script de Python para crear una geodatabase en PostgreSQL.

La herramienta Crear geodatabase corporativa facilita la configuración de una geodatabase porque crea los objetos de base de datos y otorga los privilegios que necesita. Para lograrlo, se usa una configuración predeterminada específica. A continuación, se describe lo que hace la herramienta Crear geodatabase corporativa y la configuración que utiliza:

  • Crea una base de datos utilizando la plantilla predeterminada PostgreSQL (template1).

    Si necesita crear la base de datos con una plantilla distinta (por ejemplo, si desea usar la plantilla postgis), debe hacerlo antes de ejecutar esta herramienta. A partir de ese momento, puede ejecutar la herramienta Crear geodatabase corporativa o un script y especificar el nombre de la base de datos creada previamente.

  • Crea un rol de inicio de sesión sde en el clúster de base de datos y le otorga estado de superusuario.

    El usuario sde debe ser un superusuario para crear la geodatabase.

  • Crea un esquema sde en la base de datos.

    Las tablas del sistema, vistas, funciones y procedimientos de geodatabase se almacenan en el esquema sde.

  • Establece el usuario sde como propietario del esquema sde y otorga el uso al rol público en el esquema sde.

    Los roles de inicio de sesión que usarán la geodatabase deben ser capaces de acceder al esquema sde. Como es probable que los roles de inicio de sesión de geodatabase no existan aún, esta herramienta otorga el uso al público. Después de crearse la geodatabase, puede reforzar su seguridad revocando el uso del público en el esquema sde y otorgándolo solo a los grupos y roles de inicio de sesión que necesitan acceso a la geodatabase.

  • Crea una geodatabase.

En primer lugar, debe instalar PostgreSQL y configurar el clúster de base de datos.

Instalar y configurar PostgreSQL

Siga estos pasos para configurar un clúster de base de datos de PostgreSQL para almacenar una geodatabase en un servidor Linux:

  1. Obtenga e instale una versión compatible de PostgreSQL y configure el clúster de la base de datos.

    Es posible descargar instalaciones de PostgreSQL desde My Esri. Si utiliza esta instalación, no es necesaria ninguna configuración específica no predeterminada para utilizar PostgreSQL con ArcGIS. Solo asegúrese de cambiar la configuración regional y la ubicación si desea utilizar un valor diferente al predeterminado. Como alternativa, puede obtener la instalación de PostgreSQL por su cuenta.

    Consulte la documentación de PostgreSQL para obtener instrucciones sobre la instalación y configuración de PostgreSQL.

  2. Configure el clúster de la base de datos para aceptar las conexiones.

    Esto incluye modificar el archivo pg_hba.conf para permitir que el clúster de bases de datos acepte conexiones remotas.

  3. Establezca las siguientes variables de entorno para el usuario postgres si no están ya establecidas correctamente:

    • PGDATA: se debería haber establecido con la instalación de PostgreSQL. Si no, establézcalo en la ubicación del directorio de datos de PostgreSQL. (Se encuentra en el directorio de instalación de PostgreSQL).
    • LD_LIBRARY_PATH: establezca la variable LD_LIBRARY_PATH en el directorio PostgreSQL de lib. La ubicación del directorio lib varía en función de cómo haya instalado PostgreSQL. Para determinar la ubicación correcta para la instalación de PostgreSQL, ejecute pg_config como usuario de postgres. Establecer LD_LIBRARY_PATH en el valor que se muestra para PKGLIBDIR.
    • PATH: establezca la variable PATH para que contenga postgresql/bin.

  4. Cree un espacio de tabla en el clúster de la base de datos en la que almacenó su base de datos. Si no crea un espacio de tabla, se utilizará el espacio de tabla pg_default.

A continuación, instale y configure un cliente de ArcGIS.

Instalar un cliente de ArcGIS

Puede instalar ArcGIS Desktop (Desktop Standard o Desktop Advanced) o ArcGIS Server (enterprise edition) y ejecutar un script de Python para crear una geodatabase. Si desea ejecutar la herramienta de geoprocesamiento Crear geodatabase corporativa en lugar de un script, instale ArcGIS Desktop.

Nota:

Necesita un archivo de códigos clave de ArcGIS Server (enterprise edition) para autorizar su geodatabase en la siguiente sección. Aunque no ejecute un script de Python desde un equipo con ArcGIS Server para crear la geodatabase, debe instalar y autorizar ArcGIS Server para obtener el archivo de códigos clave. Puede que tenga que copiar el archivo de códigos clave desde el ArcGIS Server en una ubicación a la que pueda acceder la herramienta de geoprocesamiento Crear geodatabase corporativa.

ArcGIS Desktop solo se admite en sistemas operativos Windows y, por lo tanto, está instalado en un equipo distinto de PostgreSQL. Puede instalar ArcGIS Server en el mismo equipo que PostgreSQL; sin embargo, como los sistemas de administración de bases de datos son aplicaciones que requieren mucha memoria, no es aconsejable.

  1. Instale el cliente de ArcGIS desde el cual creará la geodatabase.

    Normalmente, las geodatabases se crean desde una instalación de ArcGIS Server o ArcGIS Desktop (Standard o Advanced).

  2. Si va a utilizar ArcGIS Server con la geodatabase en PostgreSQL, establezca o modifique las siguientes variables para la cuenta de ArcGIS:

    • SDEHOME: establezca esta variable en el directorio de instalación de ArcGIS Server.

      Por ejemplo, si ArcGIS Server está instalado en la ubicación predeterminada de un servidor Linux, establezca export SDEHOME=/home/ags/arcgis/server.

    • PG_HOME: defina PG_HOME como /opt/PostgreSQL/<version>.

      En este ejemplo, se configura PG_HOME para una instalación de PostgreSQL 11.2: export PG_HOME=/opt/PostgreSQL/11.2.

    • Si ArcGIS Server está instalado en un servidor de Windows, agregue las ubicaciones PG_HOME\bin y SDEHOME\bin a la variable PATH.

      Por ejemplo, en Linux establezca export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin.

    • Si ArcGIS Server está instalado en un servidor Linux, agregue $PG_HOME/lib y $SDEHOME/lib a la variable LD_LIBRARY_PATH.

      Por ejemplo, establezca export LD_LIBRARY_PATH=$LD_LIBRARY_PATH$PG_HOME/lib:$SDEHOME/lib.

Ahora que ArcGIS está instalado, tendrá acceso al archivo st_geometry.so, que debe colocarse en el servidor de PostgreSQL.

Colocar el archivo st_geometry.so

Debe colocar el archivo st_geometry.so en el directorio PostgreSQL de lib para poder crear una geodatabase. La ubicación del directorio lib en Linux puede variar en función de cómo haya instalado PostgreSQL. Para determinar la ubicación correcta para la instalación de PostgreSQL, ejecute pg_config como usuario de postgres. El valor que se devuelve para PKGLIBDIR es el directorio lib donde es necesario colocar la biblioteca st_geometry.

Puede obtener el archivo st_geometry.so desde My Esri o desde la instalación de ArcGIS Server. En la siguiente tabla se indica en qué ubicación del directorio de instalación se debe buscar cada versión de la biblioteca st_geometry.so.

Versión de PostgreSQLDirectorio de instalación del cliente de ArcGIS

PostgreSQL 10.x

DatabaseSupport/PostgreSQL/10/Linux64

PostgreSQL 11.x

DatabaseSupport/PostgreSQL/11/Linux64

PostgreSQL 12.x

DatabaseSupport/PostgreSQL/12/Linux64

Precaución:

El directorio ArcGIS Server DatabaseSupport se crea con los permisos definidos en 700. Si usa el archivo instalado con ArcGIS Server, cambie los permisos del archivo a 755 cuando inicie sesión como usuario raíz para mover el archivo st_geometry.so al directorio PostgreSQL de lib. En caso contrario, el usuario sde no podrá acceder a él para crear una geodatabase.

Como usuario raíz, coloque el archivo de la biblioteca st_geometry.so específico de la versión de PostgreSQL que esté usando en el directorio PostgreSQL de lib. Si no coloca la biblioteca st_geometry.so correcta en el directorio PostgreSQL de lib, no podrá crear una geodatabase.

Ahora, su clúster de base de datos y cliente de ArcGIS están listos para que cree una geodatabase.

Crear una geodatabase

Puede ejecutar la herramienta Crear geodatabase corporativa desde ArcGIS Desktop (Desktop Standard o Desktop Advanced) o un script de Python desde un cliente de ArcGIS Desktop (Desktop Standard o Desktop Advanced), ArcGIS Server (enterprise edition) para crear una geodatabase.

Ejecutar la herramienta Crear geodatabase corporativa

Si tiene acceso a ArcGIS Desktop, puede ejecutar una herramienta de geoprocesamiento para crear la geodatabase.

Siga estos pasos para crear una geodatabase usando la herramienta Crear geodatabase corporativa en ArcGIS Pro:

  1. Inicie ArcGIS Pro.
  2. Abra la herramienta Crear geodatabase corporativa.

    Puede buscar o examinar esta herramienta, que se encuentra en el conjunto de herramientas Administración de la geodatabase de la caja de herramientas Administración de datos.

  3. Elija PostgreSQL en la lista desplegable Plataforma de la base de datos.
  4. Escriba el nombre del servidor de PostgreSQL en el cuadro de texto Instancia.
  5. En el cuadro de texto Base de datos, escriba el nombre de la base de datos que desee crear para incluir su geodatabase.
    Nota:

    Escriba el nombre de la base de datos en minúsculas; los nombres de objetos en mayúsculas o con una mezcla de mayúsculas y minúsculas no son compatibles con las geodatabases en PostgreSQL. Si escribe el nombre de una base de datos en mayúsculas o en una mezcla de mayúsculas y minúsculas, ArcGIS lo convierte a minúsculas.

  6. Debe conectarse al cluster de base de datos como el superusuario de postgres para crear la base de datos y otros objetos; por lo tanto, el cuadro de texto Administrador de base de datos se predetermina a postgres. Si el superusuario de postgres tiene un nombre diferente, escriba ese nombre en el cuadro de texto Administrador de base de datos.
  7. Escriba la contraseña del superusuario de postgres en el cuadro de texto Contraseña del administrador de base de datos.
  8. El administrador de la geodatabase se debe llamar sde en PostgreSQL; por lo tanto, el cuadro de texto Administrador de la geodatabase se rellena con sde.
  9. Escriba una contraseña para el usuario sde en el cuadro de texto Contraseña del administrador de la geodatabase.

    Si el usuario sde ya existe en el cluster de la base de datos, escriba la contraseña del usuario existente y se crea un esquema sde en la base de datos. Si el usuario no existe aún, un usuario denominado sde con la contraseña que especificó se crea en el cluster de la base de datos y un esquema correspondientes se crea en la base de datos. El uso se concede en el esquema sde para el rol de grupo público.

    Sugerencia:

    Si desea que el esquema sea más seguro después de crear la geodatabase, puede revocar el uso del rol de grupo público, crear un nuevo rol de grupo, otorgar uso en el esquema sde a ese rol y después otorgar el rol de grupo a todos los roles de inicio de sesión que necesiten acceder a la geodatabase.

  10. Si tiene un espacio de tabla preconfigurado para utilizarlo como el espacio de tabla predeterminado de la base de datos, escriba su nombre en el cuadro de texto Nombre del espacio de tabla.

    Esta herramienta no crea un espacio de tabla; debe especificar un espacio de tabla existente o dejar este cuadro de texto en blanco. Si no se especifica un espacio de tabla, la base de datos se crea en pg_default.

  11. Para especificar un Archivo de autorización, busque y seleccione el archivo de códigos clave que se creó cuando autorizó ArcGIS Server Enterprise.

    Este archivo se escribe en la carpeta \\Program Files\ESRI\License<release#>\sysgen en servidores de Windows y /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen en Linux. Copie este archivo en una ubicación que sea accesible para el cliente desde el que se está creando la geodatabase. Si aún no lo ha hecho, autorice ArcGIS Server ahora para crear este archivo.

  12. Haga clic en Ejecutar.

    Puede encontrar los mensajes relativos a la creación de la geodatabase en el archivo sde_setup.log, que se crea en el directorio especificado para la variable %TEMP% del equipo en el que se ejecuta la herramienta. Si tiene algún problema al crear una geodatabase, compruebe este archivo para solucionarlo.

Ahora tiene una geodatabase en PostgreSQL.

A continuación, puede crear un usuario que puede cargar datos en la geodatabase.

Ejecutar un script de Python

Puede copiar, guardar y ejecutar el script proporcionado aquí para crear una geodatabase desde ArcGIS Desktop (Desktop Standard o Desktop Advanced) o ArcGIS Server (enterprise edition).

  1. Cree un archivo de texto en el equipo cliente de ArcGIS y copie en él el script siguiente.
    """
    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. Guarde el archivo con una extensión .py.
  3. Ejecute el script, proporcionando opciones e información específicas de su sitio.

    En el siguiente ejemplo ejecutado desde un equipo con Linux, el archivo create_gdb.py se ejecuta para un clúster de base de datos llamado pgprod como superusuario postgres con la contraseña N0pe3king!. Se crea una base de datos llamada entgdb en un espacio de tabla existente llamado gis y el rol de inicio de sesión sde con la contraseña Tgdbst@rtsh3r3. Se especifica un archivo de códigos clave en la ubicación predeterminada de ArcGIS Server para autorizar la geodatabase.

    ./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'

    En este ejemplo, se ejecuta la misma script desde un equipo con 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'
    Sugerencia:

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

Ahora tiene una geodatabase en PostgreSQL.

Puede encontrar los mensajes relativos a la creación de la geodatabase en el archivo sde_setup.log, que se crea en el directorio especificado para la variable TEMP o TMP del equipo en el que se ejecuta el script. Si tiene algún problema al crear una geodatabase, compruebe este archivo para solucionarlo.

A continuación, puede crear un usuario que puede cargar datos en la geodatabase.

El administrador de PostgreSQL crea la base de datos; el administrador de la geodatabase, la geodatabase

Si la persona que va a crear la geodatabase no tiene acceso a la contraseña del administrador de base de datos (el superusuario postgres), este puede configurar la base de datos y, a continuación, el administrador de la geodatabase puede conectarse a ella con el rol de inicio de sesión sde y crear una geodatabase en la base de datos con la herramienta de geoprocesamiento Habilitar geodatabase corporativa o un script de Python.

La herramienta Habilitar geodatabase corporativa acepta un archivo de conexión de base de datos como entrada y crea las tablas del sistema, vistas, funciones y procedimientos de geodatabase en el esquema sde. Antes de que pueda ejecutarse la herramienta, el administrador de base de datos debe configurar lo siguiente en el clúster de base de datos de PostgreSQL:

  • Un rol de inicio de sesión llamado sde con estado de superusuario
  • Una base de datos
  • Un esquema sde en la base de datos, propiedad del rol de inicio de sesión sde
  • La biblioteca st_geometry debe estar en el directorio de instalación de PostgreSQL

Tenga en cuenta que solo deben usarse caracteres en minúscula en todos los nombres de objetos de base de datos.

Instalar y configurar PostgreSQL y la biblioteca st_geometry

En primer lugar, el administrador de base de datos debe preparar PostgreSQL para almacenar una geodatabase.

Las siguientes instrucciones son para que el administrador de base de datos configure el clúster de base de datos de PostgreSQL en un servidor de Linux. Tenga en cuenta que solo deben usarse caracteres en minúscula en todos los nombres de objetos de base de datos (la base de datos, el esquema y los roles de inicio de sesión).

  1. Obtenga e instale una versión compatible de PostgreSQL y configure el clúster de la base de datos.

    Es posible descargar instalaciones de PostgreSQL desde My Esri. Si utiliza esta instalación, no es necesaria ninguna configuración específica no predeterminada para utilizar PostgreSQL con ArcGIS. Solo asegúrese de cambiar la configuración regional y la ubicación si desea utilizar un valor diferente al predeterminado. Como alternativa, puede obtener la instalación de PostgreSQL por su cuenta.

    Consulte la documentación de PostgreSQL para obtener instrucciones sobre la instalación y configuración de PostgreSQL.

  2. Configure el clúster de la base de datos para aceptar las conexiones.

    Esto incluye modificar el archivo pg_hba.conf para permitir que el clúster de bases de datos acepte conexiones remotas.

  3. Establezca las siguientes variables de entorno para el usuario postgres si no están ya establecidas correctamente:

    • PGDATA: se debería haber establecido con la instalación de PostgreSQL. Si no, establézcalo en la ubicación del directorio de datos de PostgreSQL. (Se encuentra en el directorio de instalación de PostgreSQL).
    • LD_LIBRARY_PATH: establezca la variable LD_LIBRARY_PATH en el directorio PostgreSQL de lib. La ubicación del directorio lib varía en función de cómo haya instalado PostgreSQL. Para determinar la ubicación correcta para la instalación de PostgreSQL, ejecute pg_config como usuario de postgres. Establecer LD_LIBRARY_PATH en el valor que se muestra para PKGLIBDIR.
    • PATH: establezca la variable PATH para que contenga postgresql/bin.

  4. De manera opcional, puede crear un espacio de tabla en el clúster de base de datos en el que almacenó su base de datos.
  5. Cree un rol de inicio de sesión llamado sde y otórguele estado de superusuario.

    Sugerencia:

    En caso de que el administrador de la geodatabase no elimine conexiones de base de datos, puede revocar el estado de superusuario del rol sde una vez que se haya creado la geodatabase.

  6. Cree la base de datos que almacenará la geodatabase.
  7. Cree un esquema llamado sde en la base de datos y proporcione autoridad al rol de inicio de sesión en el esquema.
  8. Asimismo, debe colocar el archivo de la biblioteca st_geometry.so en el directorio PostgreSQL de lib. Puede descargar el archivo st_geometry.so desde My Esri. Asegúrese de descargar la biblioteca correcta para la versión de PostgreSQL que esté utilizando. Si usa una incorrecta, fallará la creación de la geodatabase.

    Cuando tenga el archivo st_geometry.so correcto, colóquelo en el directorio PostgreSQL de lib tras iniciar sesión como usuario raíz. Tenga en cuenta que la ubicación del directorio lib en Linux puede variar en función de cómo haya instalado PostgreSQL. Para determinar la ubicación correcta para la instalación de PostgreSQL, ejecute pg_config como usuario de postgres. El valor que se devuelve para PKGLIBDIR es el directorio lib donde es necesario colocar la biblioteca st_geometry.

  9. Asegúrese de que el permiso del archivo st_geometry.so se ha definido como 755. En caso contrario, el usuario sde no podrá acceder a la biblioteca para crear una geodatabase.
  10. Proporcione información de conexión de base de datos al administrador de la geodatabase.

    Este debe conocer el nombre del clúster de base de datos, el nombre de base de datos y la contraseña del rol de inicio de sesión sde.

Ahora que existe una base de datos y está configurada, el administrador de la geodatabase puede preparar un cliente de ArcGIS y crear una geodatabase.

Instalar un cliente de ArcGIS

El administrador de la geodatabase debe seguir estos pasos para preparar el cliente de ArcGIS para crear una geodatabase:

  1. Instale el cliente de ArcGIS desde el cual creará la geodatabase.

    Normalmente, las geodatabases se crean desde una instalación de ArcGIS Server o ArcGIS Desktop (Desktop Standard o Desktop Advanced).

  2. Si va a utilizar ArcGIS Server con la geodatabase en PostgreSQL, establezca o modifique las siguientes variables para la cuenta de ArcGIS:

    • SDEHOME: establezca esta variable en el directorio de instalación de ArcGIS Server.

      Por ejemplo, si ArcGIS Server está instalado en la ubicación predeterminada de un servidor Linux, establezca export SDEHOME=/home/ags/arcgis/server.

    • PG_HOME: defina PG_HOME como /opt/PostgreSQL/<version>.

      En este ejemplo, se configura PG_HOME para una instalación de PostgreSQL 10.3: export PG_HOME=/opt/PostgreSQL/10.3.

    • Si ArcGIS Server está instalado en un servidor de Windows, agregue las ubicaciones PG_HOME\bin y SDEHOME\bin a la variable PATH.

      Por ejemplo, en Linux establezca export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin.

    • Si ArcGIS Server está instalado en un servidor Linux, agregue $PG_HOME/lib y $SDEHOME/lib a la variable LD_LIBRARY_PATH.

      Por ejemplo, establezca export LD_LIBRARY_PATH=$LD_LIBRARY_PATH$PG_HOME/lib:$SDEHOME/lib.

Su cliente de ArcGIS está listo para conectarse a la base de datos y crear una geodatabase.

Crear una geodatabase

El administrador de geodatabase puede ejecutar la herramienta Habilitar geodatabase corporativa desde ArcGIS Desktop (Desktop Standard o Desktop Advanced) o un script de Python desde un cliente de ArcGIS Desktop, ArcGIS Server para crear una geodatabase en la base de datos existente.

Ejecutar la herramienta Habilitar geodatabase corporativa

Si tiene acceso a ArcGIS Desktop, puede ejecutar una herramienta de geoprocesamiento para crear la geodatabase.

Siga estos pasos para crear una geodatabase usando la herramienta Habilitar geodatabase corporativa en ArcGIS Pro

  1. Inicie ArcGIS Pro.
  2. Conéctese a la base de datos PostgreSQL como el usuario sde.

    Asegúrese de guardar la contraseña de usuario sde en el cuadro de diálogo Conexión de base de datos.

  3. Abra la herramienta Habilitar geodatabase corporativa.
  4. Arrastre el nuevo archivo de conexión al campo Base de datos de entrada.
  5. Navegue al archivo de autorización de ArcGIS Server que se creó cuando autorizó ArcGIS Server y agréguelo al cuadro de texto Archivo de autorización.

    Cuando utiliza el asistente para autorizar ArcGIS Server, se escribe un archivo de códigos clave en el servidor donde está instalado el software. Si autorizó ArcGIS Server en un cuadro de Linux, el archivo de códigos clave se creó en /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release>/sysgen. Si autorizó en un servidor de Windows, el archivo se creó en Program Files\ESRI\License<release>\sysgen. Si aún no lo hizo, autorice ArcGIS Server para crear este archivo.

  6. Haga clic en Ejecutar.

Se crea una geodatabase en la base de datos.

Puede encontrar los mensajes relativos a la creación de la geodatabase en el archivo sde_setup.log, que se crea en el directorio especificado para la variable %TEMP% del equipo en el que se ejecuta la herramienta. Si tiene algún problema al crear una geodatabase, compruebe este archivo para solucionarlo.

A continuación, el administrador de base de datos puede crear roles de inicio de sesión en la base de datos.

Ejecutar un script de Python

Si desea crear la geodatabase ejecutando un script desde una instalación de ArcGIS Server o ArcGIS Desktop (Desktop Standard o Desktop Advanced), puede usar el script que se proporciona aquí.

  1. Cree un archivo de texto en el equipo cliente de ArcGIS y copie en él el script siguiente.

    """
    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. Guarde el archivo con una extensión .py.
  3. Ejecute el script, proporcionando opciones e información específicas de su sitio.

    En el siguiente ejemplo, se ejecuta el archivo enable_gdb.py para la base de datos spdata en el clúster de base de datos pgprod. La conexión se realiza con el nombre de usuario sde y la contraseña Tgdbst@rtsh3r3. Se especifica un archivo de códigos clave en la ubicación predeterminada de ArcGIS Server para autorizar la geodatabase.

    ./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'
    Sugerencia:

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

Ahora tiene una geodatabase en PostgreSQL.

Puede encontrar los mensajes relativos a la creación de la geodatabase en el archivo sde_setup.log, que se crea en el directorio especificado para la variable TEMP o TMP del equipo en el que se ejecuta el script. Si tiene algún problema al crear una geodatabase, compruebe este archivo de registro para solucionarlo.

A continuación, el administrador de base de datos puede crear roles de inicio de sesión en la base de datos.