Créer une géodatabase dans un service de base de données Cloud PostgreSQL

ArcGIS prend en charge plusieurs offres de bases de données en tant que services Cloud reposant sur PostgreSQL. Vous pouvez créer une géodatabase d’entreprise dans la plupart des services de base de données Cloud PostgreSQL qu’Esri prend en charge.

Lorsque vous créez une géodatabase depuis ArcGIS Pro 3.2, la version de la géodatabase est 11.2.0.

Remplir les prérequis

Avant de créer une géodatabase d’entreprise, vous devez créer l’instance de base de données dans votre compte Cloud, la configurer pour recevoir des connexions, créer un utilisateur sde ainsi qu’une structure et accorder à l’utilisateur sde les privilèges visant à créer une géodatabase.

Suivez les instructions indiquées par votre fournisseur de stockage Cloud pour effectuer ces étapes.

Vous devez également copier le fichier d’autorisation du code clé ArcGIS Server sur la machine Cloud lorsque vous installez le client ArcGIS que vous avez l’intention d’utiliser pour créer la géodatabase.

Consultez et effectuez les étapes préalables avant de créer une géodatabase :

  1. Assurez-vous que les versions ArcGIS que vous utilisez sont compatibles avec le type de service de base de données Cloud et la version que vous souhaitez utiliser.
  2. Créez l’instance de service de base de données dans la plateforme Cloud de votre choix.
  3. Créez un identifiant de connexion nommé sde pour l’instance de base de données.
  4. Accordez à l’utilisateur sde les privilèges nécessaires pour créer une géodatabase en fonction du type de service de base de données que vous utilisez.
  5. Créez une structure nommée sde dans l’instance de base de données et accordez l’autorité sur la structure à l’utilisateur sde.
  6. Installez le client ArcGIS, c’est à-dire ArcGIS Pro ou ArcGIS Server, que vous utiliserez pour créer la géodatabase.

    Installez le client ArcGIS dans la même plateforme Cloud et la même région que celles dans lesquelles le service de base de données fonctionne.

  7. Assurez-vous que l’instance de base de données est configurée de façon à autoriser les connexions à partir du client ArcGIS.
  8. Depuis le client ArcGIS que vous avez installé à l’étape 6, créez une connexion à une base de données à l’instance de base de données en vous connectant en tant qu’utilisateur sde.

    Pour voir des exemples de chaînes d’instance, reportez-vous à la rubrique Connexions aux bases de données dans ArcGIS Pro.

    Si l’utilisateur sde est un utilisateur authentifié de base de données, vous devez enregistrer le mot de passe de l’utilisateur sde dans la connexion à la base de données.

  9. Procurez-vous un fichier de codes de clés ArcGIS Server et placez-le dans un emplacement accessible depuis le client ArcGIS que vous allez utiliser pour créer la géodatabase.

Vous pouvez maintenant créer une géodatabase dans l’instance de base de données dans le Cloud.

Créer une géodatabase dans l’instance de service de base de données

Si vous avez installé ArcGIS Pro dans la même région Cloud que le service de base de données, vous pouvez exécuter l’outil de géotraitement Activer une géodatabase d’entreprise pour créer une géodatabase dans l’instance de base de données, comme décrit dans la première section ci-dessous.

Vous pouvez également exécuter la fonction EnableEnterpriseGeodatabase ArcPy dans une fenêtre Python ou exécuter un script Python à partir d’une installation ArcGIS Pro ou ArcGIS Server dans le Cloud.

Exécutez l'outil Activer une géodatabase d'entreprise.

Procédez comme suit pour créer une géodatabase à l’aide de l’outil Activer une géodatabase d’entreprise dans ArcGIS Pro :

  1. Connectez-vous à la machine virtuelle dans l’environnement Cloud et lancez ArcGIS Pro.
  2. Ouvrez l'outil Activer une géodatabase d'entreprise.
  3. Pour le paramètre Input Database Connection (Connexion à la base de données en entrée), indiquez le fichier de connexion à une base de données que vous avez créé dans le cadre des étapes préalables.
  4. Pour spécifier une valeur Authorization File (Fichier d’autorisation), recherchez et choisissez le fichier de codes clés qui a été créé lorsque vous avez autorisé ArcGIS Server (édition Enterprise).

    Le fichier est écrit vers \\Program Files\ESRI\License<release#>\sysgen lorsque vous installez ArcGIS Server sur Windows et vers /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen lorsque vous installez ArcGIS Server sur Linux.

  5. Cliquez sur Run (Exécuter).

L’instance de base de données contient maintenant une géodatabase.

Le fichier sde_setup.log contient les messages associés à la création de la géodatabase ; il est créé dans le répertoire spécifié pour la variable TEMP sur la machine virtuelle sur laquelle le script est exécuté. Si vous rencontrez un problème lors de la création d’une géodatabase, consultez ce fichier pour le résoudre.

Ensuite, l’administrateur de base de données peut créer des rôles de connexion, et les structures correspondantes, pour les utilisateurs qui créent, modifient et affichent les données, ainsi que pour les éditeurs et les utilisateurs dotés du rôle de consultation des données.

Exécuter la fonction EnableEnterpriseGeodatabase ArcPy

Pour exécuter les fonctions ArcPy, connectez-vous à l’une des machines client ArcGIS du Cloud et exécutez la fonction à partir d’une fenêtre Python.

  1. Connectez-vous à la machine virtuelle dans l’environnement Cloud sur laquelle ArcGIS Pro ou ArcGIS Server est installé.
  2. Accédez à une fenêtre Python.

    Pour plus d’informations sur l’accès à Python à partir des installations ArcGIS, consultez les informations suivantes :

  3. Exécutez la fonction EnableEnterpriseGeodatabase ArcPy à partir d’une fenêtre Python.

    Utilisez le fichier de connexion à une base de données que vous avez créé et faites référence au fichier d’autorisation ArcGIS Server que vous avez placé dans un emplacement accessible au cours des étapes préalables.

    Dans l’exemple suivant, la fonction EnableEnterpriseGeodatabase est exécutée depuis une installation ArcGIS Pro. Le fichier de connexion à la base de données (postresdbaas.sde) est stocké dans un dossier du projet ArcGIS Pro (C:\proprojects\pg_proj) et le fichier d’autorisation (keycodes) dans C:\authcodes.

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

    Dans l’exemple suivant, la fonction est exécutée depuis une installation ArcGIS Server sur une machine Linux. Le fichier de connexion à une base de données (postresdbaas.sde) est stocké dans /usr/connectionfiles et le fichier de codes clés se trouve dans l’emplacement ArcGIS Server par défaut.

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

L’instance de base de données contient maintenant une géodatabase.

Le fichier sde_setup.log contient les messages associés à la création de la géodatabase ; il est créé dans le répertoire spécifié pour la variable TEMP sur la machine virtuelle sur laquelle la fonction est exécutée. Si vous rencontrez un problème lors de la création d’une géodatabase, consultez ce fichier pour le résoudre.

Ensuite, l’administrateur de base de données peut créer des rôles de connexion, et les structures correspondantes, pour les utilisateurs qui créent, modifient et affichent les données, ainsi que pour les éditeurs et les utilisateurs dotés du rôle de consultation des données.

Exécuter un script Python à partir d’un client ArcGIS

Pour créer la géodatabase en exécutant un script depuis ArcGIS Pro (Desktop Standard ou Desktop Advanced) ou sur une machine ArcGIS Server, vous pouvez utiliser le script fourni ici.

Pour exécuter un script Python qui invoque les fonctions CreateDatabaseConnection et EnableEnterpriseGeodatabase ArcPy pour se connecter à la base de données et créer une géodatabase dans un service de base de données PostgreSQL, procédez comme suit :

  1. Créez un fichier texte sur l’ordinateur du client ArcGIS, puis copiez-y le script suivant :

    """
    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. Enregistrez le fichier avec l’extension .py.
  3. Exécutez le script en indiquant les options et informations propres à votre instance.

    Dans les exemples suivants, le fichier enable_gdb.py est exécuté à partir d’une machine virtuelle dans la même région Cloud que le service de base de données.

    Dans cet exemple, le script est exécuté dans une installation ArcGIS Server sur une machine Linux. Il se connecte à une base de données nommée myauroradb dans une instance Amazon Aurora PostgreSQL dans la région us-west-2 (database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com). Le fichier de codes clés a été placé dans /usr/arcgis/auth sur la machine 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'

    Dans l’exemple suivant, le script est exécuté sur un ordinateur Microsoft Windows dans Azure. Il se connecte à une base de données nommée azurepgf dans l’instance Microsoft Azure Database for PostgreSQL (serveur flexible) my-pg-flex.postgres.database.azure.com. Le fichier de codes de clés se trouve dans l’emplacement ArcGIS Server par défaut.

    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'

    Dans l’exemple suivant, le script est exécuté depuis une machine sur laquelle ArcGIS Pro est installé et le fichier de codes de clés a été placé dans Users\MyUser\Documents\AuthFiles\keycodes. Le script se connecte à une base de données (gcspostgres) dans une instance Google Cloud SQL for PostgreSQL accessible via l’adresse IP publique 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'

    Conseil :

    Saisissez -h ou --help à l’invite de commande pour obtenir de l’aide sur la syntaxe de ce script.

L’instance de base de données contient maintenant une géodatabase.

Le fichier sde_setup.log contient les messages associés à la création de la géodatabase ; il est créé dans le répertoire spécifié pour la variable TEMP ou TMP sur la machine virtuelle où le script est exécuté. Si vous rencontrez un problème lors de la création d’une géodatabase, consultez ce fichier pour le résoudre.

Ensuite, l’administrateur de base de données peut créer des rôles de connexion, et les structures correspondantes, pour les utilisateurs qui créent, modifient et affichent les données, ainsi que pour les éditeurs et les utilisateurs dotés du rôle de consultation des données.