Mettre à niveau une géodatabase dans PostgreSQL

Disponible avec une licence Standard ou Advanced.

La mise à niveau d'une géodatabase d'entreprise consiste à mettre à jour les tables système de géodatabase, les procédures stockées, les types et les fonctions pour bénéficier des nouvelles fonctionnalités et des corrections de bogues. Il peut aussi être nécessaire de mettre à niveau la base de données si la version que vous utilisez n’est plus prise en charge pour les clients ArcGIS que vous utilisez.

Installez une nouvelle version de ArcGIS Pro ou ArcGIS Server ou appliquez un service pack, un patch ou un correctif à une installation existante, puis mettez à niveau la géodatabase.

Remarque :

Même si vous ne mettez pas à niveau la géodatabase, il se peut que la version de base de données que vous utilisez ne soit plus prise en charge avec la version actuelle du logiciel ArcGIS. Vérifiez toujours la configuration système requise pour vous assurer que vous utilisez une version de base de données prise en charge Si la version de base de données n’est plus prise en charge, il peut être nécessaire de mettre à niveau la géodatabase. Plus vous laissez passer de temps entre les mises à niveau, plus le processus de mise à niveau est complexe.

Lorsque vous mettez à niveau la géodatabase à l’aide de ArcGIS Pro 3.3, la version de la géodatabase mise à niveau est 11.3.0.

Suivez la procédure requise avant la mise à niveau, puis mettez à niveau la géodatabase à l’aide de l’outil de géotraitement Upgrade Geodatabase (Mettre à niveau la géodatabase) ou d’un script Python.

Avant de procéder à la mise à niveau

Planifiez à l’avance la mise à niveau d’un système d’entreprise, notamment une géodatabase. Testez la nouvelle version sur un serveur de développement ou de test pour vérifier qu'elle fonctionne avec toutes vos applications clientes.

Une fois que vous vous êtes assuré que le nouveau système fonctionne comme prévu, programmez la mise à niveau ; assurez-vous que le personnel nécessaire est disponible pour effectuer la mise à niveau et qu’il dispose des autorisations nécessaires pour effectuer les tâches qui lui sont attribuées.

Vérifiez les éléments suivants :

  • Les mises à niveau des versions bêta ou des préversions du logiciel ne sont pas prises en charge.
  • Vous pouvez effectuer une mise à niveau directement depuis une géodatabase de version 10.9.x ou 11.x si la version de la base de données PostgreSQL est prise en charge avec la version actuelle d’ArcGIS.

    Si la version de la base de données PostgreSQL n’est pas prise en charge pour la version de géodatabase actuelle, il peut être nécessaire de mettre à niveau la base de données et la géodatabase plusieurs fois avant de pouvoir mettre à niveau la géodatabase vers la version actuelle. Plus vous attendez entre les mises à niveau de base de données, plus vous aurez à effectuer de mises à niveau pour obtenir la dernière version de base de données.

    Par exemple, dans le scénario suivant, vous devez mettre à niveau la base de données et la géodatabase deux fois chacune :

    La mise à niveau d’une version de géodatabase beaucoup plus ancienne requiert une mise à niveau en plusieurs étapes de la géodatabase et de la base de données.

    Pour chaque mise à niveau de géodatabase intermédiaire, suivez les instructions de mise à niveau pour la version de géodatabase appropriée, puis testez la géodatabase à mesure que vous passez d’une version à une autre. De même, suivez les instructions de mise à niveau du fournisseur de base de données pour chaque version de base de données et testez la géodatabase à mesure que vous passez d’une version à une autre.

  • Il n’existe aucun mécanisme formel permettant de rétrograder une géodatabase vers une version antérieure. Si, après avoir effectué une mise à niveau vers une version plus récente, vous voulez rétrograder la géodatabase, vous pouvez restaurer la base de données à partir d’un fichier de sauvegarde contenant l’ancienne version de la géodatabase.
  • Lorsque vous procédez à une mise à niveau à partir d’une géodatabase 11.2.0 qui utilise le type spatial ST_Geometry, le processus de mise à niveau est supprimé et les index spatiaux que vous avez définis dans les colonnes ST_Geometry sont recréés.

La liste de contrôle suivante décrit les étapes à suivre avant de mettre à niveau votre géodatabase :

  1. Prenez connaissance de la configuration requise d’ArcGIS pour PostgreSQL afin de vérifier qu’Esri prend en charge l’association des versions PostgreSQL et ArcGIS que vous souhaitez utiliser.

    Si vous devez mettre à niveau la base de données PostgreSQL, consultez la documentation PostgreSQL pour plus d’informations sur les nouvelles fonctions du système de gestion de base de données et sur la procédure de mise à niveau. Gardez à l'esprit que les bases de données mises à niveau doivent avoir les mêmes nom et propriétaire qu'auparavant. En outre, définissez la variable search_path de la base de données sur "$user", public et sde.

  2. Créez une connexion à la base de données authentifiée en tant qu’utilisateur sde.
  3. Vérifiez que la géodatabase peut être mise à jour.

    Pour ce faire, installez la version du client ArcGIS que vous souhaitez migrer vers un ordinateur. Si vous installez ArcGIS Pro, utilisez la connexion que vous avez créée à l’étape précédente pour vous connecter à la géodatabase et ouvrez la boîte de dialogue Database Properties (Propriétés de la base de données) afin de déterminer si la géodatabase peut être mise à niveau. Si vous installez ArcGIS Server (édition Enterprise), vous pouvez utiliser le fichier de connexion que vous avez créé à l’étape précédente ainsi que la fonction ArcPy Describe pour déterminer si la géodatabase peut être mise à niveau, comme illustré dans l’exemple ci-dessous.

    # Open Python.
    cd /arcgis/server/tools
    ./python
    
    # Create a connection to the geodatabase.
    arcpy.CreateDatabaseConnection_management("/tmp/",
                                              "egdb_connection.sde",
                                              "POSTGRESQL",
                                              "mypgdbcluster",
                                              "DATABASE_AUTH",
                                              "sde",
                                              "mysdepassword",
                                              "SAVE_USERNAME",
                                              "mypgdb")
    
    # Import ArcPy and check the geodatabase release.
    import arcpy
    
    isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease
    
    print isCurrent

    Si la valeur False est renvoyée, vous pouvez mettre à niveau la géodatabase. Si la valeur True est renvoyée, il est inutile de mettre à niveau la géodatabase. N'exécutez pas les étapes suivantes.

  4. Créez une sauvegarde de la base de données.
  5. Supprimez les fonctionnalités personnalisées que vous avez ajoutées aux tables système de géodatabase en dehors d’ArcGIS, telles que des déclencheurs ou des index supplémentaires.

    La procédure de mise à niveau ne peut pas tenir compte des personnalisations que vous apportez aux tables système. Si de telles personnalisations empêchent l'altération de la structure d'une table système, la mise à niveau échoue.

  6. L’administrateur de base de données doit accorder à l’utilisateur sde les privilèges nécessaires à la mise à niveau de la géodatabase.

    Pour connaître les privilèges requis, reportez-vous à la rubrique Privilèges pour les géodatabases dans PostgreSQL.

  7. Assurez-vous qu’aucune connexion n’est établie à la géodatabase que vous mettez à niveau.

    Pour afficher la liste des utilisateurs actuellement connectés à la géodatabase, ouvrez la boîte de dialogue Geodatabase Administration (Administration de géodatabase) dans ArcGIS Pro.

  8. Si la géodatabase utilise le type ST_Geometry, effectuez l’étape suivante. Dans le cas contraire, vous pouvez procéder à la mise à niveau de la géodatabase.

    Si vous en savez pas si la géodatabase utilise le type ST_Geometry, connectez-vous à la base de données à partir d’un client SQL en tant qu’utilisateur sde ou superutilisateur et vérifiez si des fonctions ST_Geometry sont présentes dans la structure de l’utilisateur sde.

  9. Téléchargez le fichier st_geometry depuis My Esri, et placez-le dans le répertoire %PostgreSQL%\lib (Microsoft Windows) ou PostgreSQL lib (Linux) sur le serveur PostgreSQL.

    Vous pouvez déterminer l’emplacement exact du répertoire lib de votre installation PostgreSQL sur Linux en exécutant l’utilitaire pg_config en tant qu’utilisateur postgres. L’emplacement du répertoire lib est indiqué par le paramètre PGPKGLIBDIR.

    Utilisez la bibliothèque appropriée en fonction de la version de PostgreSQL et du système d’exploitation du serveur. Les étiquettes des dossiers indiquent la version de la bibliothèque PostgreSQL.

    • Si le serveur PostgreSQL exécute Linux, connectez-vous en tant qu’utilisateur racine au serveur et utilisez FTP pour transférer le fichier st_geometry.so vers le répertoire PostgreSQL lib.
    • Si le serveur PostgreSQL exécute Windows, copiez le fichier st_geometry.dll vers le dossier lib du répertoire d’installation de PostgreSQL.

Vous pouvez maintenant mettre à niveau la géodatabase.

Mettre à niveau la géodatabase

Vous pouvez utiliser l’outil Mettre à niveau la géodatabase dans ArcGIS Pro ou exécuter un script Python sur un ordinateur ArcGIS Pro ou ArcGIS Server pour mettre à niveau votre géodatabase.

Remarque :

Si la géodatabase contient des données versionnées de branche, des étapes supplémentaires requises après la mise à niveau peuvent s’avérer nécessaires. Pour plus d’instructions, reportez-vous à la rubrique Fonctionnement de l’outil Mettre à niveau la géodatabase.

Utiliser l'outil Mettre à niveau la géodatabase

Ouvrez l’outil de géotraitement Upgrade Geodatabase (Mettre à niveau la géodatabase) de l’une des manières suivantes :

  • le jeu d'outils Administration de la géodatabase de la boîte à outils Data Management,
  • le bouton Run Upgrade (Exécuter la mise à niveau) dans l’onglet General (Général) de la boîte de dialogue Database Properties (Propriétés de la base de données) de ArcGIS Pro

Si vous ouvrez l'outil à partir de la boîte de dialogue Propriétés de la base de données, la zone de texte Géodatabase en entrée contient déjà les informations nécessaires à une connexion à la géodatabase.

Esri recommande de laisser les options Pre-requisites check (Exécuter une recherche de prérequis) et Upgrade geodatabase (Mettre à niveau la géodatabase) activées. De cette façon, l’outil vérifie si les conditions préalables à la mise à niveau sont réunies avant la mise à niveau de la géodatabase.

Le contrôle préalable détecte d’autres connexions actives à la géodatabase, détermine si l’utilisateur qui tente d’établir la connexion a des privilèges suffisants pour mettre à niveau la géodatabase, garantit que la base de données peut prendre en charge des colonnes XML, s’assure que tous les jeux de données peuvent être ouverts et que la base de données et bibliothèques sont à la même version. Si les conditions préalables ne sont pas toutes remplies, l'outil s'arrête. Vous devez résoudre tous les problèmes avant d'exécuter à nouveau la mise à niveau.

Les résultats de ce contrôle sont signalés dans la boîte de dialogue de l'outil de géotraitement. Si la vérification échoue, les résultats sont également consignés dans le fichier GDBUpgrade.log dans le dossier c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product>.

Si tous les contrôles aboutissent, l’outil poursuit la mise à niveau. L'état du contrôle préalable et de la mise à niveau est indiquée dans la boîte de dialogue de progression de l'outil de géotraitement. Si la mise à niveau échoue, des informations sont consignées dans le fichier GDBUpgrade.log. Des informations supplémentaires sont consignées dans le fichier sde_setup.log dans le répertoire TEMP de utilisateur. Si aucun répertoire temporaire n’est configuré pour l’utilisateur, le répertoire TEMP du système est utilisé.

Exécuter un script

Pour mettre à niveau la géodatabase à l’aide d’un script Python, copiez un de ces scripts d’exemple dans un éditeur de texte. Modifiez les valeurs des variables pour qu'elles correspondent aux informations de votre site.

  • Si vous avez un fichier de connexion à une base de données qui établit la connexion en tant qu’utilisateur sde, copiez le script correspondant à votre système d’exploitation, collez-le dans un éditeur de texte et modifiez-le pour insérer les informations propres à votre site, puis enregistrez le fichier, fermez-le et exécutez le script :
    # Name: upgradesdegdb_example.py
    # Description: Connect from a Windows computer 
    # with an existing database connection file 
    # and upgrade an enterprise geodatabase in PostgreSQL
    
    # 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 computer 
    # with an existing database connection file 
    # and upgrade an enterprise geodatabase in PostgreSQL
    
    # 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 vous n'avez pas de fichier de connexion à une base de données sur l'ordinateur à partir duquel vous rédigez le script de mise à niveau, vous pouvez copier le script suivant et indiquer les informations propres à votre site sur la ligne de commande :
    """
    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
    """
    
    # Import system modules
    import arcpy
    import os
    import optparse
    import 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 Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS 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)
    Par exemple, si vous avez enregistré le fichier texte sous le nom gdbupgrade, que la grappe de bases de données se nomme mypgdbcluster et que la base de données est myogdb, saisissez les informations suivantes à l’invite de commande :

    gdbupgrade --DBMS POSTGRESQL -i mypgdbcluster --auth DATABASE_AUTH -u sde -p mysdepassword --upgrade TRUE -D mypgdb