Programar una actualización de una geodatabase en PostgreSQL

Puede modificar y utilizar una de las secuencias de comandos de Python que se presentan en este tema para actualizar y conectarse a una geodatabase corporativa.

El primer conjunto de secuencias de comandos utiliza un archivo de conexión de base de datos existente para conectarse y actualizar una geodatabase.

La segunda secuencia de comandos muestra cómo puede proporcionar información de conexión en la misma secuencia de comandos utilizada para actualizar la geodatabase. Esto es especialmente útil si no obtiene acceso a ArcGIS for Desktop; puede ejecutar la secuencia de comandos de Python desde un equipo donde esté instalado ArcGIS Engine con la extensión Geodatabase Update o ArcGIS for Server (Standard o Advanced), proporcionar información de conexión y actualizar la geodatabase.

La conexión que establece a la geodatabase, ya sea utilizando un archivo de conexión de base de datos existente o por medio de parámetros en la secuencia de comandos, es una conexión directa. Debe tener lo siguiente en el equipo en que ejecute la secuencia de comandos deberá disponer de lo siguiente:

Asegúrese de haber leído y realizado los pasos en Preparar la actualización de una geodatabase en PostgreSQL antes de actualizar.

Pasos:
  1. En primer lugar, compruebe si la geodatabase se puede actualizar.
    1. Abra Python.

      cd /arcgis/server/tools
      ./python
      

    2. Use la función Describir para determinar si la versión de su geodatabase coincide con la versión de su cliente ArcGIS.

      import arcpy
      
      isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease
      
      print isCurrent
      

    Si aparece el texto false, puede actualizar la geodatabase. Continúe con el siguiente paso. Si aparece el texto true, no necesita actualizar la geodatabase.

  2. Para actualizar la geodatabase, copie una de estas secuencias de comandos de ejemplo en un editor de texto. Modifique cualquier valor de variable para que coincidan con la información del sitio.
    • Si tiene un archivo de conexión de base de datos existente que utiliza una conexión directa y se conecta como el administrador de la geodatabase, copie y modifique una de las siguientes secuencias de comandos en el sistema operativo:
      # Name: upgradesdegdb_example.py
      # Description: Connect from a Windows computer 
      # with an existing database connection file 
      # and upgrade an enterprise geodatabase in PostgreSQL
      # Author: Esri
      
      # Import arcpy module
      import arcpy
       
      # Local variables:
      Output_Workspace = "C:\\ArcGIS\connection_files\<Connection file>"
      Default_gdb = "C:\\ArcGIS\connection_files\<Connection file>"
      
      # Process: Upgrade Geodatabase
      arcpy.UpgradeGDB_management(Default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
      
      # Name: upgradesdegdb_example.py
      # Description: Connect from a Linux or UNIX computer 
      # with an existing database connection file 
      # and upgrade an enterprise geodatabase in PostgreSQL
      # Author: Esri
      
      # Import arcpy module
      import arcpy
       
      # Local variables:
      Output_Workspace = "<user>/connections/<Connection_file>"
      Default_gdb = "<user>/connections/<Connection_file>"
      
      # Process: Upgrade Geodatabase
      arcpy.UpgradeGDB_management(Default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
      
    • Si no tiene un archivo de conexión de la base de datos en el equipo desde el que programa la actualización, puede copiar y modificar la siguiente secuencia de comandos:
      """
      Name: upgrade_gdb.py
      Description: Provide connection information to an Enterprise geodatabase 
      and upgrade the geodatabase
      Type upgrade_gdb.py -h or upgrade_gdb.py --help for usage
      Author: Esri
      """
      
      # 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=['SQLSERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS',''], default="", help="Type of enterprise DBMS:  SQLSERVER, ORACLE, or POSTGRESQL.")
      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 ("--upgrade", dest="Upgrade", type="choice", choices=['TRUE', 'FALSE'], default="FALSE", help="Upgrade Options (case-sensitive):  TRUE=Perform Pre-requisite check and upgrade geodatabase, FALSE=Perform Pre-requisite check only.  Default=FALSE")                   
      parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
      
      
      # 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 to upgrade
      	account_authentication = options.account_authentication.upper()
      	username = options.User.lower() 
      	password = options.Password	
      	do_upgrade = options.Upgrade
      	database = options.Database.lower()
      	database_type = options.Database_type.upper()
      	instance = options.Instance
      	
      	if (database_type == ""):
      		print "\nDatabase type must be specified!\n"
      		parser.print_help()
      		sys.exit(3)
      	
      	if (database_type == "SQLSERVER"):
      		database_type = "SQL_SERVER"
      	
      	# Get the current product license
      	product_license=arcpy.ProductInfo()
      	
      	# Checks required license level to upgrade
      	if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
      		print "\n" + product_license + " license found!" + "  Enterprise geodatabase upgrade requires an ArcGIS for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for Server license."
      		sys.exit("Re-authorize ArcGIS before upgrading.")
      	else:
      		print "\n" + product_license + " license available!  Continuing to upgrade..."
      		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")
      			
      	# Check whether geodatabase needs upgrade
      	isCurrent = arcpy.Describe(Connection_File_Name_full_path).currentRelease
      	
      	if isCurrent == True:
      		print "The geodatabase is already at the current release and cannot be upgraded!"
      		sys.exit("Upgrade did not run.")
      	
      	
      	# Process: Upgrade geodatabase...
      	try:
      		if do_upgrade.lower() == "true":
      			print "Upgrading Geodatabase...\n"
      			arcpy.UpgradeGDB_management(input_workspace=Connection_File_Name_full_path, input_prerequisite_check="PREREQUISITE_CHECK", input_upgradegdb_check="UPGRADE")
      			for i in range(arcpy.GetMessageCount()):
      				arcpy.AddReturnMessage(i)
      			arcpy.AddMessage("+++++++++\n")
      	
      		else:
      			print "Running Pre-Requisite Check...\n"
      			arcpy.UpgradeGDB_management(input_workspace=Connection_File_Name_full_path, input_prerequisite_check="PREREQUISITE_CHECK", input_upgradegdb_check="NO_UPGRADE")
      			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)
      
  3. Ejecute la secuencia de comandos que copió y modificó para realizar la verificación de requisitos previos y actualice la geodatabase.

Temas relacionados

5/9/2014