Restaurer une géodatabase dans PostgreSQL

Pour restaurer une base de données d’un fichier d’archive créé à l’aide de la commande pg_dump, utilisez la commande pg_restore. Veillez à tester vos modèles de sauvegarde et de récupération avec des bases de données de test.

Pour restaurer une géodatabase ou une base de données si ST_Geometry est installé, vous devez restaurer les structures dans un ordre spécifique : tout d'abord la structure publique, puis la structure sde et enfin les structures restantes.

Pour obtenir des instructions générales sur la récupération, par exemple sur les options de syntaxe, consultez la documentation PostgreSQL. En outre, si vous avez installé PostGIS et si vous utilisez le stockage de géométrie ou de géographie, veillez à lire attentivement la documentation PostGIS concernant la création de sauvegardes et la restauration de bases de données. Cette procédure peut varier selon la version de PostGIS que vous utilisez.

  1. Les noms des bases de données doivent être uniques sur l’agrégat de bases de données PostgreSQL. Par conséquent, si vous restaurez le même agrégat de bases de données, vous devez supprimer la base de données existante.
    dropdb –U sde mypgdb
  2. Si vous restaurez dans un nouvel agrégat de bases de données, connectez-vous à psql, recréez le rôle de connexion sde et accordez-lui l’autorité de super-utilisateur.
    CREATE ROLE sde LOGIN 
      ENCRYPTED PASSWORD '0shallpass'
      SUPERUSER INHERIT;
  3. Si vous restaurez dans un nouvel agrégat de bases de données, recréez les rôles de connexion pour tous les propriétaires de données. Vous pouvez également recréer des rôles d'éditeur et de connexion en lecture seule à ce stade, mais ce n'est pas nécessaire en vue de restaurer la base de données.

    Le script d'exemple suivant crée des groupes et rôles de connexion de propriétaire de données, d'éditeur et de lecteur, puis ajoute les rôles de connexion aux groupes appropriés.

    --Re-create dataowners group and login roles.
    CREATE ROLE dataowners
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    
    CREATE ROLE owner1 LOGIN
      ENCRYPTED PASSWORD 'pw.4.owner1'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT dataowners TO owner1;
    
    CREATE ROLE owner2 LOGIN
      ENCRYPTED PASSWORD 'pw.4.owner2'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT dataowners TO owner2;
    
    --Re-create editors group and login roles.
    CREATE ROLE editors
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    
    CREATE ROLE editor1 LOGIN
      ENCRYPTED PASSWORD 'pw.4editor1'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT editors TO owner1;
    
    CREATE ROLE owner2 LOGIN
      ENCRYPTED PASSWORD 'pw.4editor2'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT editors TO editor2;
    
    --Re-create readers group and login roles.
    CREATE ROLE readers
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    
    CREATE ROLE reader1 LOGIN
      ENCRYPTED PASSWORD 'pw.4reader1'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT readers TO reader1;
    
    CREATE ROLE owner2 LOGIN
      ENCRYPTED PASSWORD 'pw.4reader2'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT readers TO reader2;
  4. Si vous procédez à une restauration dans un nouvel agrégat de bases de données et si la géodatabase utilise le type spatial ST_Geometry, veillez à placer la bibliothèque st_geometry dans le répertoire PostgreSQL lib. Reportez-vous à la rubrique Créer une géodatabase dans PostgreSQL sur Linux ou Créer une géodatabase dans PostgreSQL sur Windows pour en savoir plus sur le placement de la bibliothèque st_geometry.
  5. Créez de nouveau la base de données. Vous pouvez utiliser l’instruction createdb sur la ligne de commande ou une instruction psql pour effectuer cette opération.
    Remarque :

    Veillez à ce que la nouvelle base de données ait les mêmes propriétés que la base de données que vous allez restaurer, notamment le nom, le codage et le propriétaire.

    L'exemple suivant utilise l'outil en ligne de commande createdb pour créer une base de données nommée mypgdb avec l'encodage UTF8, détenue par le rôle de connexion sde et située dans l'espace disque tblspgdb :

    createdb –U sde –E UTF8 –D tblspgdb -O sde mypgdb
  6. Reconnectez-vous à psql et créez une structure sde détenue par le rôle de connexion sde dans la nouvelle base de données. Accordez l'autorisation d'utilisation sur la structure sde à tous les rôles ou groupes de connexion qui accéderont à la géodatabase.
    CREATE SCHEMA sde
      AUTHORIZATION sde;
    
    GRANT USAGE ON SCHEMA sde TO dataowners;
    GRANT USAGE ON SCHEMA sde TO editors;
    GRANT USAGE ON SCHEMA sde TO readers;
  7. Modifiez le chemin de recherche de la nouvelle base de données pour qu'il comprenne la structure sde.
    ALTER DATABASE mypgdb
      SET SEARCH_PATH="$user",sde,public;
  8. Sur la ligne de commande, restaurez la structure publique et les données à l’aide de la commande pg_restore. Exécutez la commande pour vous connecter avec des privilèges de super-utilisateur, par exemple en tant qu'utilisateur postgres ou SDE.
    Attention :

    Vous devez restaurer la structure publique et son contenu en premier. Dans le cas contraire, toutes vos données spatiales ne seront pas restaurées. Restaurez ensuite la structure sde. Si vous ne suivez pas cette étape, les index spatiaux ne sont pas recréés sur les classes d'entités.

    Par exemple, pour restaurer la structure publique d’un fichier de sauvegarde de base de données nommé mypgdb1031.dump dans la base de données mypgdb, exécutez la commande suivante :

    pg_restore -U sde -d mypgdb -n public mypgdb1031.dump
  9. Restaurez ensuite le contenu de la structure sde.
    pg_restore -U sde -d mypgdb -n sde mypgdb1031.dump
  10. Enfin, restaurez les structures et données restantes.
    pg_restore –U sde –d mypgdb mypgdb1031.dump
  11. Une fois la base de données restaurée, testez-la en vous y connectant à partir de ArcGIS Pro et en examinant les données.