Crear una geodatabase en un servicio de base de datos PostgreSQL en la nube

ArcGIS admite varias ofertas de bases de datos como servicio en la nube basadas en PostgreSQL. Puede crear una geodatabase empresarial en la mayoría de servicios de base de datos de PostgreSQL basados en la nube compatible con Esri.

Cuando se crea una geodatabase en ArcGIS AllSource 3.3, la versión de la geodatabase es 11.3.0.

Completar los requisitos previos

Antes de poder crear una geodatabase, debe crear la instancia de base de datos en su cuenta en la nube, configurarla para recibir conexiones, crear un usuario sde y un esquema, y conceder al usuario sde privilegios para crear una geodatabase.

Siga las instrucciones facilitadas por su proveedor de nube para completar estos pasos.

También debe copiar el archivo de autorización del código clave de ArcGIS Server en el equipo en la nube donde instale el cliente de ArcGIS que utilizará para crear la geodatabase.

Complete los siguientes pasos previos antes de crear una geodatabase:

  1. Confirme que las versiones de ArcGIS que utiliza admiten el tipo y la versión del servicio de base de datos basado en la nube que desea utilizar.
  2. Cree la instancia del servicio de base de datos en la plataforma en la nube que haya elegido.
  3. Cree un inicio de sesión de usuario llamado sde para la instancia de base de datos.
  4. Conceda al usuario sde los privilegios necesarios para crear una geodatabase para el tipo de servicio de base de datos que esté utilizando.
  5. Cree un esquema llamado sde en la instancia de base de datos y conceda al usuario sde autoridad sobre el esquema.
  6. Instale el cliente de ArcGIS —ArcGIS AllSource o ArcGIS Server— que utilizará para crear la geodatabase.

    Instale el cliente ArcGIS en la misma plataforma en la nube y en la misma región donde se ejecuta el servicio de base de datos.

  7. Asegúrese de que la instancia de base de datos está configurada para permitir conexiones desde el cliente ArcGIS.
  8. Desde el cliente ArcGIS que instaló en el paso 6, cree una conexión de base de datos a la instancia de base de datos, conectándose como usuario sde.

    Consulte Conexiones a bases de datos en ArcGIS AllSource para ver ejemplos de cadenas de instancia.

    Si el usuario sde es un usuario autenticado en la base de datos, debe guardar la contraseña del usuario sde en la conexión de la base de datos.

  9. 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.

Ahora puede crear una geodatabase en la instancia de base de datos en la nube.

Crear una geodatabase en la instancia del servicio de base de datos

Si se ha instalado ArcGIS AllSource en la misma región de la nube que el servicio de base de datos, puede ejecutar la herramienta de geoprocesamiento Habilitar geodatabase corporativa para crear una geodatabase en la instancia de base de datos, como se describe en la primera sección a continuación.

Como alternativa, puede ejecutar la funciónArcPy de EnableEnterpriseGeodatabase en una ventana de Python o ejecutar un script de Python desde una instalación de ArcGIS AllSource o ArcGIS Server en la nube.

Ejecutar la herramienta Habilitar geodatabase corporativa

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

  1. Inicie sesión en la máquina virtual en el entorno de nube e inicie ArcGIS AllSource.
  2. Abra la herramienta Habilitar geodatabase corporativa.
  3. Para el parámetro Conexión de base de datos de entrada, proporcione el archivo de conexión de base de datos que creó como parte de los pasos de prerrequisitos.
  4. Para un Archivo de autorización, busque y seleccione el archivo de códigos clave que se creó cuando autorizó ArcGIS Server (Enterprise edition).

    Este archivo se escribe en \\Program Files\ESRI\License<release#>\sysgen al instalar ArcGIS Server en Windows y en /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen al instalar ArcGIS Server en Linux.

  5. Haga clic en Ejecutar.

Ahora tiene una geodatabase en la instancia de base de datos.

Puede encontrar mensajes relacionados con la creación de la geodatabase en el archivo sde_setup.log, que se crea en el directorio especificado para la variable TEMP en equipo en el que se ejecuta la secuencia de comandos. Si tiene algún problema al crear una geodatabase, consulte este archivo para solucionarlo.

A continuación, el administrador de la base de datos puede crear roles de inicio de sesión y esquemas coincidentes para los usuarios que crearán, editarán y verán datos y crearán roles de inicio de sesión para editores y visualizadores de datos.

Ejecutar la función ArcPy de EnableEnterpriseGeodatabase

Para ejecutar funciones ArcPy, conéctese a uno de los equipos cliente de ArcGIS en la nube y ejecute la función desde una ventana de Python.

  1. Inicie sesión en el equipo virtual en el entorno de nube donde ArcGIS AllSource o ArcGIS Server está instalado.
  2. Acceda a una ventana de Python.

    Consulte a continuación la información sobre el acceso a Python desde las instalaciones de ArcGIS:

    • Ventana de Python: información sobre cómo abrir la ventana desde ArcGIS AllSource
    • ArcGIS Server y ArcPy: información sobre cómo acceder a la ventana de Python en una instalación de ArcGIS Server

  3. Ejecute la función ArcPy de EnableEnterpriseGeodatabase desde una ventana de Python.

    Utilice el archivo de conexión a la base de datos que creó y haga referencia al archivo de autorización de ArcGIS Server que colocó en una ubicación accesible como parte de los pasos previos.

    En el siguiente ejemplo, la función de EnableEnterpriseGeodatabase se ejecuta desde una instalación de ArcGIS AllSource. El archivo de conexión a la base de datos (postresdbaas.sde) se guarda en una carpeta del proyecto de ArcGIS AllSource (C:\proprojects\pg_proj) y el archivo de autorización (keycodes) se guarda en C:\authcodes.

    arcpy.management.EnableEnterpriseGeodatabase(r"C:\proprojects\pg_proj\postresdbaas.sde",r"C:\authcodes\keyfile")

    En el siguiente ejemplo, la función se ejecuta desde una instalación de ArcGIS Server en un equipo Linux. El archivo de conexión a la base de datos (postresdbaas.sde) se guarda en /usr/connectionfiles y el archivo de códigos clave está en la ubicación predeterminada de ArcGIS Server.

    arcpy.management.EnableEnterpriseGeodatabase("/usr/connectionfiles/postresdbaas.sde","/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes")

Ahora tiene una geodatabase en la instancia de base de datos.

Puede encontrar mensajes relacionados con la creación de la geodatabase en el archivo sde_setup.log, que se crea en el directorio especificado para la variable TEMP en equipo en el que se ejecuta la función. Si tiene algún problema al crear una geodatabase, consulte este archivo para solucionarlo.

A continuación, el administrador de la base de datos puede crear roles de inicio de sesión y esquemas coincidentes para los usuarios que crearán, editarán y verán datos y crearán roles de inicio de sesión para editores y visualizadores de datos.

Ejecutar un script de Python desde un cliente de ArcGIS

Para crear la geodatabase ejecutando un script desde un equipo de ArcGIS AllSource (Desktop Standard o Desktop Advanced) o ArcGIS Server puede usar el script que se proporciona aquí.

Siga estos pasos para ejecutar un script de Python que llame a las funciones ArcPy de CreateDatabaseConnection y EnableEnterpriseGeodatabase para conectarse a la base de datos y crear una geodatabase en un servicio de base de datos de PostgreSQL:

  1. Cree un archivo de texto en el equipo cliente de ArcGIS y copie en él la secuencia de comandos 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 instancia.

    En los siguientes ejemplos, el archivo enable_gdb.py se ejecuta desde un equipo virtual en la misma región de la nube que el servicio de base de datos.

    En este ejemplo, el script se ejecuta desde una instalación de ArcGIS Server en un equipo Linux. Se conecta a una base de datos llamada myauroradb en una instancia de Amazon Aurora PostgreSQL en la región us-west-2 region (database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com). El archivo de códigos clave se colocó en /usr/arcgis/auth en el equipo de ArcGIS Server.

    ./enable_gdb.py --DBMS POSTGRESQL -i database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com --auth DATABASE_AUTH 
    -u sde -p sdeP@ss -D myauroradb -l '/usr/arcgis/auth/keycodes'

    En el siguiente ejemplo, el script se ejecuta desde un equipo Microsoft Windows en Azure. Se conecta a una base de datos llamada azurepgf en la instanciamy-pg-flex.postgres.database.azure.com de Microsoft Azure Database for PostgreSQL. El archivo de códigos clave se encuentra en la ubicación de ArcGIS Server predeterminada.

    enable_gdb.py --DBMS POSTGRESQL -i my-pg-flex.postgres.database.azure.com --auth DATABASE_AUTH 
    -u sde -p EsDeeEpass -D azurepgf -l '\\Program Files\ESRI\License\sysgen\keycodes'

    En el siguiente ejemplo, el script se ejecuta desde un equipo donde está instalado ArcGIS AllSource y el archivo keycodes se colocó en Users\MyUser\Documents\AuthFiles\keycodes. El script se conecta a una base de datos (gcspostgres) en una instancia de Google Cloud SQL for PostgreSQL a la que se accede a través de la dirección IP pública 98.765.43.210.

    enable_gdb.py --DBMS POSTGRESQL -i 98.765.43.210 --auth DATABASE_AUTH 
    -u sde -p Zpassw0rd -D gcspostgres -l '\\Users\MyUser\Documents\AuthFiles\keycodes'

    Sugerencia:

    Introduzca -h o --help en la ventana de comando para obtener ayuda con la sintaxis de este script.

Ahora tiene una geodatabase en la instancia de base de datos.

Puede encontrar mensajes relacionados con la creación de la geodatabase en el archivo sde_setup.log, que se crea en el directorio especificado para su variable TEMP o TMP en el equipo virtual donde se ejecuta el script. Si tiene algún problema al crear una geodatabase, consulte este archivo para solucionarlo.

A continuación, el administrador de la base de datos puede crear roles de inicio de sesión y esquemas coincidentes para los usuarios que crearán, editarán y verán datos y crearán roles de inicio de sesión para editores y visualizadores de datos.