Skripterstellung für eine Enterprise-Geodatabase-Aktualisierung in PostgreSQL

Sie können eines der Python-Skripte ändern und verwenden, die in diesem Thema bereitgestellt werden, um eine Verbindung mit einer Enterprise-Geodatabase herzustellen und sie zu aktualisieren.

Die ersten Skripte verwenden eine vorhandene Datenbankverbindungsdatei, um eine Verbindung mit einer Geodatabase herzustellen und sie zu aktualisieren.

Das zweite Skript zeigt an, wie Sie Verbindungsinformationen in demselben Skript, das zur Aktualisierung der Geodatabase verwendet wird, bereitstellen können. Dies ist besonders nützlich, wenn Sie keinen Zugriff auf ArcGIS for Desktop haben; Sie können das Python-Skript von einem Computer ausführen, auf dem ArcGIS Engine mit der Erweiterung "Geodatabase Update" oder ArcGIS for Server (Standard oder Advanced) installiert ist, Verbindungsinformationen bereitstellen und die Geodatabase aktualisieren.

Die Verbindung, die Sie mit der Geodatabase herstellen, ist eine direkte Verbindung, unabhängig davon, ob Sie eine vorhandene Datenbankverbindungsdatei oder Parameter im Skript verwenden. Daher muss Folgendes auf dem Computer installiert sein, auf dem Sie das Skript ausführen:

Vor der Aktualisierung sollten Sie unbedingt die folgenden Themen gelesen und die darin enthaltenen Schritte ausgeführt haben: Vorbereiten der Aktualisierung einer Geodatabase in PostgreSQL.

Schritte:
  1. Kopieren Sie eines dieser Skripte in das Fenster Python von ArcGIS for Desktop oder in eine beliebige IDE von Python, z. B. PythonWin oder WING. Ändern Sie die Variablenwerte so, dass sie mit den Informationen an Ihrem Standort übereinstimmen.
    • Wenn Sie eine vorhandene Datenbankverbindungsdatei haben, die eine direkte Verbindung verwendet und sich als Geodatabase-Administrator verbindet, kopieren und ändern Sie eines der folgenden Skripte, abhängig vom Betriebssystem:
      # 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")
      
    • Wenn Sie keine Datenbankverbindungsdatei auf dem Computer haben, von dem Sie die das Skript für die Aktualisierung erstellen, können Sie das folgende Skript kopieren und ändern:
      """
      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 2.0; valid for 10.1 only")
      
      #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)
      
  2. Führen Sie das Skript aus, das Sie kopiert und geändert haben, um die Voraussetzungsprüfung auszuführen und die Geodatabase zu aktualisieren.

Verwandte Themen

9/11/2013