Scripting a geodatabase upgrade in PostgreSQL

You can modify and use one of the Python scripts provided in this topic to connect to and upgrade an enterprise geodatabase.

The first set of scripts use an existing database connection file to connect to and upgrade a geodatabase.

The second script shows how you can provide connection information in the same script used to upgrade the geodatabase. This is especially useful if you do not have access to ArcGIS for Desktop; you can run the Python script from a computer where ArcGIS Engine with the Geodatabase Update extension or ArcGIS for Server (Standard or Advanced) is installed, provide connection information, and upgrade the geodatabase.

The connection you make to the geodatabase, whether using an existing database connection file or through parameters in the script, is a direct connection. You must have the following on the machine from which you will run the script:

Be sure you have read and performed the steps in Preparing to upgrade a geodatabase in PostgreSQL before you upgrade.

Steps:
  1. First, check if the geodatabase can be upgraded.
    1. Open Python.

      cd /arcgis/server/tools
      ./python
      

    2. Use the Describe function to find if your geodatabase release matches your ArcGIS client release.

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

    If false is returned, you can upgrade your geodatabase. Proceed to the next step. If true is returned, you do not need to upgrade your geodatabase.

  2. To upgrade the geodatabase, copy one of these example scripts into a text editor. Alter any variable values to match the information at your site.
    • If you have an existing database connection file that uses a direct connection and connects as the geodatabase administrator, copy and modify one of the following scripts, depending on your operating system:
      # 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")
      
    • If you do not have a database connection file on the computer from which you are scripting the upgrade, you can copy and modify the following script:
      """
      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. Run the script you copied and altered to perform the prerequisite check and upgrade the geodatabase.

Related Topics

11/6/2014