administration de postgresql/postgis

66
Administration de PostgreSQL/Post GIS Ministère de la Transition Ecologique et Solidaire Licence ETALAB Septembre 2019 Version 1.3

Upload: others

Post on 05-Oct-2021

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Administration de PostgreSQL/PostGIS

Administration dePostgreSQL/Post

GIS

Ministère de la Transition Ecologiqueet Solidaire

Licence ETALAB

Septembre 2019

Version 1.3

Page 2: Administration de PostgreSQL/PostGIS

Table des matières

Objectifs 5

Introduction 7

I - Les clients et les connexions 9

A. Fichiers de configuration (postgresql.conf et pg_hba.conf)..................................9

B. Les outils clients..........................................................................................10 1.Les principaux outils clients..........................................................................................10 2.pgAdmin....................................................................................................................11 3.Psql...........................................................................................................................14 4.DBManager................................................................................................................16

C. Organisation du serveur de formation............................................................17

II - La gestion des droits 21

A. Les rôles....................................................................................................21

B. Propriétaire d'un objet.................................................................................23

C. Droits sur les objets.....................................................................................24

D. Pas-à-pas sur un exemple............................................................................27 1.Création de la base et des schémas...............................................................................27 2.Création des rôles.......................................................................................................31 3.Utilisation avec DBManager sous QGIS...........................................................................34

E. 01 (tutoré) - gestion des droits.....................................................................41

III - Sauvegarde et restauration 43

3

Page 3: Administration de PostgreSQL/PostGIS

A. Sauvegarde logique (dump).........................................................................44

B. Sauvegarder le serveur (pg_dumpall)............................................................50

C. Restauration logique....................................................................................50

D. 02 - sauvegarde et restauration....................................................................52

E. Le cas particulier de l'import des fichiers fonciers.............................................53

F. Sauvegarde au niveau système de fichiers......................................................54

G. Archivage continu.......................................................................................55

IV - Maintenance 57

A. Gestion de l'espace disque............................................................................57

B. Opérations de maintenance sur les bases.......................................................59

Solution des exercices 63

4

Page 4: Administration de PostgreSQL/PostGIS

Objectifs

Les objectifs du module sont de : connaître les principaux outils clients pour l’administration de

PostgreSQL / PostGIS apprendre à gérer les droits savoir réaliser des sauvegardes et des restaurations découvrir les opérations de maintenance.

5

Page 5: Administration de PostgreSQL/PostGIS

Introduction

Le temps d'apprentissage de ce module consacré à l'administration d'une basePostgreSQL/PostGIS est estimé à 3 heures, plus une heure pour la réalisation de l'exercicetutoré.Il comporte :

un exercice guidé sous forme de pas-à-pas ; un exercice auto-corrigé ; un exercice "tutoré" dont vous devrez communiquer le résultat à vos tuteurs.

7

Page 6: Administration de PostgreSQL/PostGIS

I - Les clients et les connexions

I

Fichiers de configuration (postgresql.conf et pg_hba.conf) 9

Les outils clients 10

Organisation du serveur de formation 17

A. Fichiers de configuration (postgresql.conf et pg_hba.conf)

PostgreSQL.confCe paragraphe concerne l'administrateur système et peut donc être sauté par lesautres profils (voir acteurs et rôles dans le module d'introduction).PostgreSQL attend des connexions depuis des logiciels clients (nous en verronsprochainement, mais QGIS en est un exemple).Le fichier de configuration propre à chaque instance PostgreSQL se nommepostgresql.conf. Ce fichier rassemble les directives de configurations1 permettant d'adapter lecomportement du serveur au matériel. Nous ne les détaillerons pas ici, mais notonsqu'il est possible en particulier de définir les adresses TCP/IP que le serveur écouteainsi que les ports d'écoute (défaut 5432). Ce fichier est géré par l'administrateursystème. Dans le cas d'une ouverture vers le Web il est conseillé de changer le port d'écoutepar défaut.

pg_hba.confLes droits de connexion aux bases sont définies dans le fichier pg_hba.conf (type deconnexion, ex : host, nom de la base de données, nom de l'utilisateur, paramètresréseaux, méthode d'authentification exemple : md5 pour demander un mot depasse).Ce fichier est présent dans le répertoire initialisé avec l'instance, par exemple dansles systèmes Debian sous etc/postgresql/9.3/main/pg_hba.conf.Une connexion ne concerne qu'une seule base de données et doit être réalisée avecun compte utilisateur.

1 - http://docs.postgresql.fr/9.4/runtime-config.html#config-setting

9

Page 7: Administration de PostgreSQL/PostGIS

Ce fichier est décrit dans la documentation de PostgreSQL2. Il y a beaucoup d'optionsréglables,par exemple le processus d'autovacuum est activé (ou non) par leparamètre -autovacuum.Il faut redémarrer PostgreSQL pour prendre en compte les modifications (commanderestart).(en fait il est possible de faire un simple reload du fichier de conf si on a modifié desparamètres qui ne nécessitent pas un redémarrage complet, voir pg_ctl3 -reload)Retenons qu'il permet un filtrage des utilisateurs par adresse IP de leur poste.

Exemple : Filtrage des utilisateurs par adresse IPexemple : host all all 172.26.0.0/24 md5

Autorise tous les utilisateurs (2ème all) à se connecter à toutes les bases (1er all)depuis n'importe quelle hôte d'un réseau local en fournissant un mot de passe (md5)pour les adresses de 172.26.0.0 à 172.26.0.255 (l'option /24 est le masque CIDR4).On peut trouver sur Internet des calculateurs5 de masque CIDR.Il aurait été possible de préciser plusieurs bases de données en les séparant par desvirgules à la place du premier all.Exemple : host postgres, service_test all 172.26.0.0 /24 md5

Ci-dessous un extrait du fichier pg_hba.conf du serveur de formation qui montre queles droits d'accès aux bases sont filtrés par adresse IP des stagiaires :

Les droits d'accès aux contenus des bases sont définis dans la base de données àplusieurs niveaux (base, schéma, table, colonne). Nous les examinons un peu plusloin.

Conseil : AstuceUne tactique possible est d'ouvrir assez largement les droits de connexion auxutilisateurs du service dans le fichier pg_hba.conf et de contrôler plus finement lagestion des droits d'accès par base dans la gestion des droits et rôles de PostgreSQL,ce qui évite de solliciter trop souvent l'administrateur système et permet de reporterla gestion des droits courants, autre que le filtrage IP et éventuelles basesstratégiques (ex : base de sauvegarde), sur l'administrateur des bases.Cependant il faut être conscient que même s'il ne peut accéder aux bases pourlesquels il n'a pas les droits, l'utilisateur peut dans ce cas parcourir l'arborescence desbases, ce qui n'est pas toujours souhaitable.

2 - http://docs.postgresql.fr/9.4/client-authentication.html#auth-pg-hba-conf3 - http://docs.postgresql.fr/9.4/app-pg-ctl.html4 - https://fr.wikipedia.org/wiki/Sous-r%C3%A9seau5 - http://cric.grenoble.cnrs.fr/Administrateurs/Outils/CalculMasque/

Les clients et les connexions

10

Page 8: Administration de PostgreSQL/PostGIS

B. Les outils clients

1. Les principaux outils clients

Outils Description

psql psql est le premier frontal pour PostgreSQL et est une interfaceen ligne de commande permettant la saisie de requêtes SQL,directement ou par l'utilisation de procédures stockées.

pgAdminIII etpgadmin4

pgAdmin est un outil d'administration graphique pourPostgreSQL distribué selon les termes de la licence PostgreSQL.pgadmin III n'est plus maintenu et remplacé par pgAdmin 4 quiest une refonte complète du programme.

phpPgAdmin

phpPgAdmin est une interface web d'administration pourPostgreSQL. L'interface s'appuie sur des scripts PHP et sur labase de données PostgreSQL pour favoriser les diverses tâchesd'administration. La version 5.6 date du 12 novembre 2018 etsupporte PostgreSQL 11.x.

QGIS QGIS est client de PostgreSQL.

dBeaver Parmi les nombreux autres clients SQL du marché, dBeaver estun outil apprécié par un grand nombre en particulier pour sonsupport multi-bases de données. C'est un outil libre diffusé souslicence Apache 2.0 dans sa version standard. Il existe uneversion Entreprise payante qui apporte des fonctionnalités enplus6. Son installation et son utilisation sont cependant plusdélicate que pgadmin 4.

Tableau 1 Quelques outils clients

Nous n'aborderons que superficiellement psql qui est plutôt réservé à l'administrateursystème et aux administrateurs de base de données expérimentés pour nousconcentrer sur deux clients que sont PgAdmin 4 et QGIS.

2. pgAdmin

pgAdmin 47 est le principal outil de gestion open source des bases de donnéesPostgreSQL. Il peut-être exécuté en mode serveur web (web application) ou en modebureau (desktop runtime). Il fourni une interface graphique pour la création, lamaintenance et l'utilisation d'objets de base de données.

Méthode : Installation

6 - https://dbeaver.com/edition/7 - http://www.pgadmin.org/?lang=fr_FR

Les clients et les connexions

11

Page 9: Administration de PostgreSQL/PostGIS

Si vous avez installé PostgreSQL survotre poste de travail, il est possible quevous disposiez déjà pgAdmin 4 installé.Dans ce cas vous pouvez le lancer àpartir de la barre de programme.

Si vous ne disposez pas encore de pgAdmin 4 sur votre poste de travail vous deveztélécharger un installateur (69.9 Mo) à partir dehttps://www.pgadmin.org/download/pgadmin-4-windows/8 ).

Après téléchargement lancer l'exécutable(vous devez disposer de droits suffisantssur votre poste de travail). Acceptez les conditions de la licence,puis poursuivre par défaut. Il peut yavoir un temps assez long dans lapréparation de l'installation.

Si tout se passe bien vous devez arriverà cet écran :

Lancer pgAdmin 4. Il se lance dans votrenavigateur par défaut (attention il fautune version récente pour Firefox).se connecter à la base de formation selonles paramètres fourni par l'organisateur.Ajouter un serveur : Menu Objets > créer serveur (ou clic droit sur le mot 'servers'dans le navigateur), ou encore en utilisant le bouton 'Ajouter un nouveau serveur'

dans les liens rapides du tableau de bord :

8 - https://www.pgadmin.org/download/pgadmin-4-windows/

Les clients et les connexions

12

Page 10: Administration de PostgreSQL/PostGIS

Saisir les paramètres du serveur

Dans le mode Bureau Il est possible d'enregistrer les mots de passe dans une basesqlite cryptée par un mot de passe maître que vous devez créer la première fois etqui vous sera ensuite demandé pour déverrouiller l'ensemble de vos connexions. Ilest fortement recommandé d'utiliser un mot de passe maître si on enregistre les motsde passe des connexions. Si vous oubliez le mot de passe maître on peut utiliser lebouton 'réinitialiser le mot de passe maître' (ce qui supprime tous les mots de passeenregistrés et ferme toutes les connexions établies).Nous verrons au fur et à mesure les différentes fonctions de pgAdmin.

Présentation

L'interface de pgAdmin comporte unebarre de menus et une fenêtre diviséeen deux volets : l’arborescence dunavigateur dans le volet gauche et unnavigateur à onglets dans le volet droit.

Pour chaque objet dans l’arborescence unmenu contextuel est disponible.

Les clients et les connexions

13

Page 11: Administration de PostgreSQL/PostGIS

Lors de la connexion au serveur existant,trois groupes d'éléments sontdisponibles dans le navigateur d'objets(volet de gauche) :

les bases de donnéesexistantes : La base postgres

installée est la base de référence, qu'il ne faut jamais modifier ; elle sert demodèle pour la création de toutes les autres bases de données.

les tablespaces : L'espace de stockage des tables et index. Il indique lerépertoire d'écriture des fichiers. Cette partie est gérée par l'administrateursystème (ou éventuellement l'administrateur de la base de données).

les rôles : Les rôles de connexions correspondent aux différents utilisateurs,et les rôles groupe, aux groupes d'utilisateurs (nous y reviendrons). Cettepartie est également gérée par l'administrateur de la base de donnée. Pardéfaut, il y a un seul rôle de connexion, celui de l'utilisateur « postgres » qui atous les droits. Généralement cet utilisateur est désactivé pour éviter lesproblèmes de sécurité et l'administrateur système créé un rôle de connexionpour l'administrateur de la base.

Une barre d'outils donne accès à des fonctions fréquemment utilisées : (outils de

requête SQL, affichage des données, et filtrage de ligne)

On peut éventuellement avoir des administrateurs délégués pour gérer une ouplusieurs bases spécifiques (gestion des droits, maintenance,...) mais il est conseilléde centraliser le droit de création de nouvelles bases.

3. Psql

psql est une interface en mode texte pour PostgreSQL. Il permet de saisir desrequêtes de façon interactive, de les exécuter sur PostgreSQL et de voir les résultatsde ces requêtes. Alternativement, les entrées peuvent êtres lues à partir d'un fichier.De plus, il fournit un certain nombre de méta-commandes et plusieurs fonctionnalitéspour faciliter l'écriture des scripts et automatiser un nombre varié de tâches.

Les clients et les connexions

14

Page 12: Administration de PostgreSQL/PostGIS

psql.exe est livré avec pgadmin4 sousC:\Program Files (x86)\pgAdmin 4\v4\runtimeIl est conseillé de se créer un .bat delancement sur le bureau de votre PC quipermettra de lancer la consoledirectement dans l'environnement duserveur de formation.

Avec un éditeur de texte (ex : notepad++9) ou le bloc note de windows, créer unnouveau fichier et copier les lignes suivantes :cls

@echo *******************************************************@echo * Console psql - serveur de formation FOAD PostgreSQL *

@echo *******************************************************@echo off

SET psql="C:\Program Files (x86)\pgAdmin 4\v4\runtime\psql.exe"set user=stage01

set mdp=stage01set dbname=stage01

set serveur=10.167.71.3set port=5432

%psql% -h %serveur% -U %user% -p %port% -d %dbname% @echo.

Veillez à remplacer dans les lignes ci-dessus 'stage01' par votre numérod'utilisateur pour la formation (ex : stage12)Puis enregistrer ce fichier sur votre bureau en le nommant 'console psql FOADPostgreSQL.bat'

9 - https://notepad-plus-plus.org/fr/

Les clients et les connexions

15

Page 13: Administration de PostgreSQL/PostGIS

Au lancement du . bat, la console vousdemande le mot de passe :

Taper votre mot de passe...Noter alors le message d'alerte sur le‘windows code page <1252>.Pour changer cela exécuter lesinstructions décrites dans les notes pourles utilisateurs Windows en bas de la

page10

La syntaxe est : \ ! cmd.exe /c chcp 1252

On a également ci-dessous un exemple d'une requête qui peut être rentréedirectement dans la console psql (terminée par ;) :select * from ‘‘COMMUNE'' ;

CTRL C permet d'interrompre une requête.

ComplémentPour faire des tests il est pratique d'utiliser l'ordre LIMIT (pour ne traiter que les npremières occurrences).Exemple :SELECT * FROM commune LIMIT 10 ;

Nous ne développerons pas beaucoup l'usage de psql dans ce cours.psql est documenté ici : https://docs.postgresql.fr/10/app-psql.html11

Il existe des méta-commandes commençant par \.ex : \i nomfichier

Lit l'entrée à partir du fichier nomfichier et l'exécute comme si elle avait été saisie surle clavier. Permet par exemple d'exécuter un script sql.À noter que l'on peut également utiliser pour ce faire la commande:$ psql -f monfichier.sql

4. DBManager

DBManager est le plugin à privilégier sous QGIS pour accéder aux bases de données.Son utilisation est détaillée dans la formation QGIS perfectionnement – Module SQL12

(PDF).

10 - http://docs.postgresql.fr/9.4/app-psql.html11 - https://docs.postgresql.fr/10/app-psql.html12 - http://www.geoinformations.developpement-durable.gouv.fr/perfectionnement-a-qgis-a2904.html

Les clients et les connexions

16

Page 14: Administration de PostgreSQL/PostGIS

Les requêtes SQL peuvent être réalisées dans le requêteur SQL de Pgadmin ou dansDBManager sous QGIS.Le choix dépend un peu des habitudes de chacun. Les personnes familiarisées avecPostgreSQL préféreront en général PgAdmin, les utilisateurs travaillantessentiellement sous QGIS pourront se passer de l'apprentissage de PgAdmin ettravailler dans DBManager qui dans ses dernières versions dispose d'un assistant derequête SQL proche de celui de Mapinfo et d'une coloration syntaxique.Dans tous les cas la visualisation des couches géométriques se fera dans QGIS

Méthode : Gestion des connexions

DBManager ne gère pas directement lesconnexions aux bases de données. Pourse connecter à une base de donnéesPostGIS il faut passer par « Ajouter une

couche PostGIS » puis

« Nouveau »

le bouton ‘Connecter' permet ensuite deréaliser la connexion.Dès lors la connexion apparaît dans lecompartiment PostGIS de DBManagerLes métadonnées de chaque schéma

sont disponibles dans l'onglet ‘info' de la fenêtre de droite.

ConseilIl est possible d'utiliser DBManager pour créer des nouveaux schémas, mais pour lagestion fine (droit, rôle,...) il est conseillé d'utiliser PgAdmin (ou psql pour ceux quimaîtrisent cet outil).

Complément : DocumentationOn trouvera plus d'informations sur DBManager dans la documentation de QGIS13.

13 - https://docs.qgis.org/3.4/fr/docs/training_manual/databases/db_manager.html

Les clients et les connexions

17

Page 15: Administration de PostgreSQL/PostGIS

C. Organisation du serveur de formation

Pour la formation vous devrez vous connecter au serveur selon les paramètres quivous ont été fournis.Un filtrage IP est mis en place pour les stagiaires, vous devez donc fournir l'adresseIP de votre poste.Si vous ne disposez pas d'un accès à une base sur un serveur distant, il estéventuellement possible de suivre cette formation en installant une instance locale dePostgreSQL/PostGIS, par exempleà partir des packages de l'OsGeo :http://download.osgeo.org/postgis/windows/pg96/14 Pour la formation, le serveur mis en place est le suivant :

Nom : celui que vous voulez Hôte : 10.167.71.3 Port TCP : 5432 Service : laissez vide Base maintenance : stageXX Nom utilisateur : stageXX Mot de passe : stageXX XX doit être remplacé par le numéro de stagiaire qui vous a été attribué (ex :

stage01).

14 - http://download.osgeo.org/postgis/windows/pg96/

Les clients et les connexions

18

Page 16: Administration de PostgreSQL/PostGIS

MéthodeLa mise en place d'un serveur PostgreSQL doit être accompagnée d'une réflexionsur :

la gestion des bases (organisation des bases, schémas, tables,...) Les méthodes de chargement des données La création de vues permettant de mettre en forme la donnée pour les

utilisateurs. la gestion des utilisateurs et des droits les opérations de maintenance (sauvegardes, indexation,...) Une analyse des risques, voir par exemple les critères DICT15 (lien intranet).

15 - http://intra.informatique.sg.i2/IMG/pdf/SG04289-03-_PGSSI_MEEDDM_-_Annexe_B_-_v2010-04-01_cle05f177.pdf

Les clients et les connexions

19

Page 17: Administration de PostgreSQL/PostGIS

La gestion des droits

20

Page 18: Administration de PostgreSQL/PostGIS

II - La gestion des droits

II

Les rôles 21

Propriétaire d'un objet 23

Droits sur les objets 24

Pas-à-pas sur un exemple 27

01 (tutoré) - gestion des droits 41

A. Les rôles

PostgreSQL gère les droits d'accès aux bases de données en utilisant le concept derôles.Bien que depuis la version 8.1 de PostgreSQL les deux concepts soient confondus, ilest utile de distinguer :

les rôles de connexion : permettant de se connecter aux serveurs les rôles de groupes permettant de gérer les droits d'accès aux bases et à

leurs objets.

ConseilComme nous allons le voir, une bonne démarche est d'affecter un rôle de connexion à1 ou plusieurs rôles de groupe qui définissent ses droits.

21

Page 19: Administration de PostgreSQL/PostGIS

Seuls les rôles disposant de l'attribut LOGIN peuvent être utilisé comme rôle deconnexion :Pour créer un rôle de connexion on utilisera en SQL : CREATE ROLE nom LOGIN ;

(dans les anciennes versions on utilisait CREATE USER nom; qui utilise LOGIN pardéfaut).On peut, plus simplement, utiliser Rôle de connexion clic droit 'Ajouter unrôle de connexion' dans pgAdmin.

nb : La saisie d'un mot de passe est obligatoire pour définir un rôle de connexion(onglet 'définition' sous Pgadmin).Nous verrons un peu plus loin comment les ordres SQL, que l'on utilise ici à titrepédagogique, peuvent être construits avec les assistants de l'interface de pgAdmin. Iln'est donc pas utile de mémoriser précisément la syntaxe SQL. Nous mettrons enpratique ces notions avec un 'pas à pas' à l'aide de pgAdmin... ne soyez donc paseffrayé par l'apparente complexité de cette étape de présentation des concepts... lamise en pratique sur des cas relativement simple vous permettra d'y voir plus clair !

ConseilComme indiqué au début de ce module il est nécessaire que le rôle de connexiondispose des droits de connexion qui sont contrôlés dans le fichier pg_hba.conf, sinonil ne pourra se connecter physiquement sur le serveur.

Méthode : Statut de superutilisateur Les superutilisateurs ne sont pas pris en compte dans les vérifications des droits(ils outrepassent le système de droits), sauf pour le droit de connexion ou pour initierune réplication. C'est donc un droit dangereux. Il est préférable de faire la grandemajorité du travail, avec un rôle qui n'est pas superutilisateur et de ne pas attribuerce droit aux autres utilisateurs.Pour donner un droit superutilisateur on utilisera en SQL : CREATE ROLE nom SUPERUSER;

Il faut avoir le droit SUPERUSER pour créer un nouveau superutilisateur.

Méthode : Droit de création de base de données Les droits de création de bases doivent être explicitement données à un rôle (àl'exception des super-utilisateurs qui passent au travers de toute vérification dedroits). Pour créer un tel rôle, utilisez en SQL :CREATE ROLE nom_utilisateur CREATEDB

Méthode : Droit de création de rôle Un rôle doit se voir explicitement donné le droit de créer d'autres rôles (àl'exception des super-utilisateurs qui passent au travers de toute vérification dedroits). Pour affecter un tel droit, utilisez :CREATE ROLE nom CREATEROLE

Un rôle disposant du droit CREATEROLE peut aussi modifier et supprimer d'autresrôles, ainsi que donner ou supprimer l'appartenance à ces rôles.C'est donc un droit important, néanmoins, pour créer, modifier, supprimer ou changerl'appartenance à un rôle superutilisateur, le statut de superutilisateur est requis.

La gestion des droits

22

Page 20: Administration de PostgreSQL/PostGIS

Méthode : Droit d'initier une réplication en fluxUn rôle doit se voir explicitement donné le droit d'initier une réplication en flux(sauf pour les superutilisateurs, puisqu'ils ne sont pas soumis aux vérifications depermissions). Un rôle utilisé pour la réplication en flux doit toujours avoir le droitLOGIN. Pour affecter un tel droit, utilisez : CREATE ROLE nom REPLICATION LOGIN.

En pratique on n'utilisera généralement pas ce droit (lié à la réplication entre bases)pour les besoins courant des services.

Méthode : Mot de passeUn mot de passe est significatif si la méthode d'authentification du client exige quele client fournisse un mot de passe quand il se connecte à la base (voir le paragraphe‘Connexions' en début de ce module et la gestion du fichier pg_hba.conf). En SQL, onpeut indiquer un mot de passe lors de la création d'un rôle avec :CREATE ROLE nom_utilisateur PASSWORD 'le_mot_de_passe'

Conseil : Bonne pratique pour la création des rôlesUne bonne pratique est de créer un rôle qui dispose des droits CREATEDB (créationde base) et CREATEROLE (création de nouveaux rôles) mais qui n'est pas unsuperutilisateur, et d'utiliser ce rôle pour toute la gestion des bases de données etdes rôles. Cette approche évite les dangers encourus en travaillant en tant quesuperutilisateur pour des tâches qui n'ont pas besoin de cet état.

Méthode : Appartenance d'un rôle Un rôle de groupe est un rôle sans attribut LOGIN(en réalité un rôle qui a le privilège LOGIN peut aussi être un groupe, mais nousn'utiliserons pas cette possibilité dans ce cours).exemple : CREATE ROLE producteur ;

On peut lui ajouter des membres en utilisant GRANT et REVOKE :Exemple : GRANT producteur to user1 ;

Les rôles membres (ici user1) qui ont l'attribut INHERIT peuvent utiliserautomatiquement les droits des rôles dont ils sont membres.Ici si user1 a été crée par la commande CREATE ROLE user1 LOGIN INHERIT ;héritera des droits du rôle producteur dont il est devenu membre par l'ordre GRANT.Attention :Si un utilisateur n'est pas créé avec l'attribut INHERIT, il n'hérite pas par défaut desprivilèges des groupes dont il est membre. L'ordre SET ROLE permet de lui accorderpour la session en cours les privilèges d'un rôle de groupe dont il est membre.Exemple : si users1 est membre de groupeproducteur, il disposera des privilèges dugroupe pour la session en cours avec :SET ROLE groupeproducteur ;

On peut révoquer les droits avec REVOKE.REVOKE producteur FROM user1 ;

La gestion des droits

23

Page 21: Administration de PostgreSQL/PostGIS

Complément : DocumentationLa notion de rôle est très souple, on consultera la documentation16 pour voir lesdétails des différentes possibilités de mise en œuvre.

B. Propriétaire d'un objet

Propriétaire d'un objet et droits d'accèsQuand un objet est créé, il se voit affecter un propriétaire. Le propriétaire estnormalement le rôle qui a exécuté la requête de création. Pour la plupart des objets,l'état initial est que seul le propriétaire (et les superutilisateurs) peuvent faire quelquechose avec cet objet. Pour permettre aux autres rôles de l'utiliser, des droits doiventêtre donnés.

Il n'est pas nécessaire d'accorder des droits au propriétaire d'un objet car, pardéfaut, le propriétaire possède tous les droits.

Les droits applicables à un objet particulier varient selon le type d'objet (table,fonction...).

Le droit de modifier ou de détruire un objet est le privilège du seulpropriétaire.

Un objet peut se voir affecter un nouveau propriétaire avec la commande ALTERcorrespondant à l'objet, par exemple 17 . Les superutilisateurs peuvent toujours lefaire. Les rôles ordinaires peuvent seulement le faire s'ils sont le propriétaire actuelde l'objet (ou un membre du rôle propriétaire, puisqu'un rôle de groupe peut êtrepropriétaire d'un objet).

C. Droits sur les objets

Droits sur les bases de donnéesLors de la création d'une base on peut indiquer des droits globaux sur la base.Sous pgAdmin cela peut être indiqué en création de base de données dans l'ongletsécurité.

16 - http://docs.postgresql.fr/9.6/role-membership.html17 - http://docs.postgresql.fr/9.4/sql-altertable.html

La gestion des droits

24

Page 22: Administration de PostgreSQL/PostGIS

Ci-dessous le rôle public se voit accorder les droits TEMPORARY et CONNECT parstage00 :

Les droits globaux sur les bases sont : CREATE (CREATE ON DATABASE nom_base) : autorise la création de

nouveaux schémas dans la base de données. TEMPORARY (TEMPORARY ON DATABASE nom_base) : autorise la création

de tables temporaires. CONNECT (CONNECT ON DATABASE nom_base) : autorise la connexion à la

base.Les droits accordés au rôle public le sont pour tous les utilisateurs.Dans l'exemple ci-dessus, tous les utilisateurs peuvent se connecter à la base encours de création et créer des tables temporaires (sélection des options TEMP etCONNECT pour le groupe public).En SQL on utilise la commande GRANT.Exemple :GRANT CREATE ON DATABASE nom_base TO public ; donne le droit de création deschémas à tous les utilisateurs.

La gestion des droits

25

Page 23: Administration de PostgreSQL/PostGIS

L'assistant de création de PgAdmin crée automatiquement le SQL en fonction del'onglet de définition des droits. Cette syntaxe est visible dans le dernier onglet :

Par défaut les droits CONNECT et TEMP sont accordés à public.L'option WITH GRANT OPTION permet d'autoriser le rôle à lui-même accorder ce droit àd'autres (possibilité de transmission18).(A utiliser avec précaution).

Droits sur les schémasLes droits sur les schémas sont :

USAGE : autorise l'accès aux objets contenus dans le schéma. CREATE : autorise la création de nouveaux objets dans les schémas.

GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }

ON SCHEMA nom_schéma [, ...]TO { [ GROUP ] nom_rôle | PUBLIC } [, ...] [ WITH GRANT OPTION ]

Droits sur les objets d'un schémaIl est possible de gérer les droits sur les objets d'un schéma (en particulier lesTABLES).

Nom Description

ALL Autorise tous les privilèges (selon le type de l'objet)

18 - http://docs.postgresql.fr/9.4/ddl-priv.html

La gestion des droits

26

Page 24: Administration de PostgreSQL/PostGIS

Nom

Description

SELECT Permet la sélection sur tout ou partie des colonnes d'une table(requête SELECT)

INSERT Permet d'insérer un enregistrement dans une table

UPDATE Permet la mise à jour des champs d'une table.

DELETE Permet d'effacer un enregistrement de la table

REFERENCES

Droit requis pour création de clé étrangère (où il faut faireréférence à une table tierce)

TRUNCATE Permet d'effacer une table ou un ensemble de tables(récupération immédiate de l'espace disque sans VACCUM)Truncate = Delete+Vacuum pour faire simple.

TRIGGER Permet de créer de nouveaux déclencheurs associés à la table

TEMPORARY Permet de créer des tables temporaires

EXECUTE Permet d'exécuter une fonction (précise)

Nota bene : il est inutile de donner des droits sur des tables aux utilisateurs si vousne donnez pas le droit USAGE sur le schéma contenant lesdites tables auxutilisateurs.Par défaut le droit EXECUTE sur les fonctions est accordé au rôle public.Pour plus de détails, on se rapportera à la documentation de la commande GRANT19.

Fondamental : Étude préalableOn le voit, on peut aller très loin dans la gestion des droits. Dans la plupart des cason se contentera d'une gestion relativement simple (gestion au niveau des bases etschémas avec droit en lecture et/ou écriture).Il faut cependant retenir que la stratégie de gestion des droits est fondamentale etdoit faire l'objet d'une étude par l'administrateur.

Conseil : Superutilisateur et administrateurOn différenciera généralement un superutilisateur (ex : superuser) et unadministrateur (geoadmin).

Superutilisateur : Il possède tous les droits. Cet utilisateur ne devrait êtreutilisé qu'en cas de nécessité. Il est donc conseillé de créer un rôled'administrateur des bases de données qui n'aura pas ce droit desuperutilisateur.

Administrateur des bases et utilisateurs (geoadm ou geoadmin) : il ales droits, CREATEDB, CREATEROLE, INHERIT.

Exemple en SQL :CREATE ROLE geoadm1 LOGIN

CREATEDB CREATEROLEVALID UNTIL 'infinity';

Rappel : on identifie qu'il s'agit d'un rôle de connexion grâce au mot clef LOGIN

19 - http://docs.postgresql.fr/9.4/sql-grant.html

La gestion des droits

27

Page 25: Administration de PostgreSQL/PostGIS

RemarqueSi le niveau des droits proposés peut être très fin, la pratique montre que le nombrede profils reste en général réduit. On pourra retenir en première approche :

les administrateurs (superuser et geoadmin) les lecteurs les producteurs

D. Pas-à-pas sur un exemple

Il est maintenant temps de mettre en pratique les notions apprises précédemment pour : créer une base, des schémas, importer des tables ; accorder des droits ; vérifier à partir de QGIS.

Nous allons voir que l'utilisation de PgAdmin permet de ne pas mémoriser la syntaxe exactedes commandes SQL, les assistants générant les requêtes pour vous.

1. Création de la base et des schémas

Lancer PgAdmin

La gestion des droits

28

Page 26: Administration de PostgreSQL/PostGIS

Méthode : Créer la base et les schémas

Faire Objet-> Créer un serveur (ouutiliser le lien rapide de l'onglet 'tableaude bord' : ajouter un nouveau serveur)et utiliser les paramètres (hôte, port) deconnexion qui vous ont été fournis parles organisateurs.Vous avez du fournir l'adresse IP devotre poste de formation auxorganisateurs qui en retour vous ontégalement retourné un login (de typestageXX) et un mot de passe.Pour la formation pilote ces paramètressont :

Nom : Serveur_formation - stageXX (remplacer XX par le numéro qui vousest attribué)

Hôte : 10.167.71.3

port : 5432

Base maintenance : stageXX (remplacer XX par le numéro qui vous estattribué)

Nom utilisateur : stageXX

mot de passe : stageXX

Couleur : choisir éventuellement une autre couleur an arrière plan et/ou enpremier plan. Ceci permettra de mettre en exergue que cette connexion estfaite avec un rôle superuser (privilège accordé par l'administrateur système).

On peut « Enregistrer le mot de passe » dans l'onglet connexion. Dans la suite de la formation remplacer XX ou 00 par le numéro qui vous est attribué(ex : droit01 à la place de droitXX ou de droit00)Le serveur pour la formation est un serveur centralisé basé (Janvier 2019) sur laversion suivante de PostgreSQL :"PostgreSQL 9.6.11 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit"et sur la version de PostGIS suivante :"POSTGIS="2.3.1 r15264" GEOS="3.5.1-CAPI-1.9.1 r4246" PROJ="Rel. 4.9.3, 15August 2016" GDAL="GDAL 2.1.2, released 2016/10/24" LIBXML="2.9.4"LIBJSON="0.12.1" RASTER"

La gestion des droits

29

Page 27: Administration de PostgreSQL/PostGIS

Faire un clic droit sur Bases de données

et créer une base de données (nousreviendrons plus tard sur les paramètresde création des bases de données).Remplir l'onglet Propriétés commeindiqué ci-contre (remplacer le 00 dedroit00 par votre numéro de stagiaire).

Remplir l'onglet Définition commeindiqué ci-contre.Vérifier que l'on a bien dans l'ongletSQL :CREATE DATABASE droit00WITH

OWNER = stage00TEMPLATE = template_sig

ENCODING = 'UTF8'

CONNECTION LIMIT = -1;puis valider.

Double cliquer sur la base de données droit00 (remplacer 00 par votre numéro)

Par défaut cette base contient au moins un schéma public.Comme déjà indiqué il n'est pas conseillé de travailler dans le schéma public.Nous allons créer les schémas production et consultation :

Pour le schéma production, nous aurons deux types d'utilisateurs : - les écrivainsXX qui auront les droits de modifier les tables existantes du

schéma production de la base droitXX- les lecteursXX qui n'auront que les droits de les visualiser.

Pour le schéma consultation, tous les utilisateurs n'auront que les droits delecture.

La gestion des droits

30

Page 28: Administration de PostgreSQL/PostGIS

Pour créer le schéma production : faire un clic droit sur la base

droitXX → Créer → schéma...

Nous rajouterons les droits plustard. Faire OK.

Puis, de même, créer le schémaconsultation.

Rappel : jeux de données à télécharger

Pour remplir ces schémas par des tablesnous allons restaurer un backup (nousreverrons plus tard, plus en détail, laproblématique de sauvegarde et derestauration des bases).

Se positionner sur la base droitXX, puis clic droit ‘restaurer' : Indiquer le fichier gestiondesdroits.backup. Dans l'onglet Options de restauration cocher dans sections : pre-data et data

et dans ne pas enregistrer : propriétaire. Lancer la restauration.

Une fenêtre apparaît en bas à droite et indique la progression de la restauration...Après un certain temps (un peu plus de 1 mn), la fenêtre indique 'Echec (code desortie 1). Si on affiche les détails on se rend compte qu'il ne s'agit que de 'WARNING'du au fait que les schémas production et consultation existent déjà dans la base.La base doit maintenant contenir la table commune dans le schéma consultation etles tables route_xy et zonageppri_lafleche dans le schéma production.Le cas échéant rafraîchir l'affichage par un clic droit puis 'actualiser...'

Vérifier dans l'onglet que le propriétaire des tables (par exemple

commune dans le schéma consultation) est bien stageXX (XX étant votre numéro destagiaire). Si ce n'est pas le cas c'est que vous n'avez pas coché ne pas sauvegarder propriétaireau moment de la restauration.

La gestion des droits

31

Page 29: Administration de PostgreSQL/PostGIS

La base doit maintenant ressembler à ceci :

2. Création des rôles

La gestion des droits

32

Page 30: Administration de PostgreSQL/PostGIS

Méthode : Nous allons maintenant créer les deux rôles de groupe

Ajouter le rôle de groupe ecrivainsXX : clic droit sur Rôles de connexion /

groupe

puis Ajouter un rôle degroupe...

Rappel : Un rôle de connexion ne sedistingue d'un rôle de groupe que parl'activation de la possibilité 'connexionautorisé' (LOGIN en SQL)Vérifier dans l'onglet SQL que vous avez(remplacer XX par votre numéro destagiaire) :

CREATE ROLE ecrivainsXX WITH

NOLOGINNOSUPERUSER

NOCREATEDBNOCREATEROLE

INHERITNOREPLICATION

CONNECTION LIMIT -1;COMMENT ON ROLE ecrivains00 IS 'droits d''écriture dans le schemaproducteur de la base droit00';

IS 'droit d''ecriture dans le schema producteur';

On utilise ici très peu les options de commande CREATE ROLE que l'on pourra quandmême relire au passage...De même, créer le rôle lecteurXX :CREATE ROLE lecteurXX WITHNOLOGIN

NOSUPERUSERNOCREATEDB

NOCREATEROLEINHERIT

NOREPLICATIONCONNECTION LIMIT -1;

Méthode : Rôles de connexionPour l'instant les rôles lecteurXX et ecrivainsXX sont identiques et n'accordent aucundroit spécifique.

La gestion des droits

33

Page 31: Administration de PostgreSQL/PostGIS

Nous allons maintenant créer deux rôles de connexion : garyXX qui appartiendra au groupe lecteurXX et ecrivainsXX, michaelXX qui appartiendra au groupe lecteurXX (rappel : remplacer XX par le

numéro qui vous a été attribué)

Faire clic droit sur rôle deconnexion / groupe

puis créer un rôle en activant dans l'onglet droits 'connexion autorisé'

Lui donner un mot de passe dans l'onglet Définition (ex : garyXX) (La saisied'un mot de passe est obligatoire pour définir un rôle de connexion).

Laisser les autres paramètres par défaut dans l'onglet Droits (hérite des droitsdes rôles parents activé).

Indiquez dans l'ongletappartenance du rôle qu'il estmembre de ecrivainsXX et delecteurXX

La syntaxe SQL dans l'onglet SQL doitêtre :CREATE ROLE gary00 WITH

LOGINNOSUPERUSER

NOCREATEDBNOCREATEROLE

INHERITNOREPLICATION

CONNECTION LIMIT -1PASSWORD 'xxxxxx';

GRANT ecrivains00, lecteur00 TO gary00;COMMENT ON ROLE gary00 IS 'gary Scherman est le fondateur du projet QGIS!';

La gestion des droits

34

Page 32: Administration de PostgreSQL/PostGIS

De même créer le rôle de connexionmichaelXX (Michael Stonebraker est lefondateur du projet PostgreSQL) etindiquer qu'il est membre du groupelecteurXX.

3. Utilisation avec DBManager sous QGIS

La gestion des droits

35

Page 33: Administration de PostgreSQL/PostGIS

Méthode : Nous allons maintenant utiliser QGIS pour vérifier les droits avec les deux rôles.

Comme indiqué précédemment dans leparagraphe sur la gestion des connexionsdans QGIS, créer la connexion suivanteci-contre.On souhaite que cette connexion soittoujours réalisée avec l'utilisateurgaryXX, on utilisera donc l'optionEnregistrer le nom d'utilisateur.Le recours à la table de métadonnéesestimées (option) permet d'optimiser larapidité d'ouverture des couches.

Constater qu'il n'y a aucune table avecgéométrie accessible pour ce rôle (le rôlen'accède pas, pour l'instant, auxschémas consultation et production).

Faire Fermer, puis créer cette connexion.

La gestion des droits

36

Page 34: Administration de PostgreSQL/PostGIS

Lancer DBManager et vérifier les droitspour les deux connexions (le cas échéantfaire clic droit reconnecter si nécessaire).Pour l'instant le seul privilège de garyXXest de créer des tables temporaires.

On peut vérifier qu'il n'a aucun droit surles schémas en se positionnant dessus.

Indiquons maintenant sous pgAdmin lesdroits sur le schéma consultation pour lerôle de groupe lecteurXX.

Se positionner sur le schémaconsultation, faire un clic droitpuis Propriétés

Onglet sécurité (permetd'indiquer les droits sur leschéma) : Cliquer sur la croix à droite deDroits pour ajouter une nouvelleligne de droits.Sélectionner le rôle lecteurXX

dans le menu déroulant, puis dans la colonne Droits activer USAGE.

Ceci nous permet d'accorder le droit USAGE (on ne souhaite pas que les membres dugroupe lecteur puisse eux-mêmes créer de nouveaux objets dans le schéma, on neleur donne pas le privilège CREATE).Notez que celui qui accorde les droits est le rôle en cours (ici stage00)Valider.On souhaite maintenant préciser les droits (privilèges) par défaut sur les futursobjets d'un schéma créés par un utilisateur ou par des rôles dont il estmembre. voir la documentation de PostgreSQL sur ALTER DEFAULT PRIVILEGES20

Nous souhaitons préciser les droits par défaut (dans notre cas le droit en lecture)pour le rôle de groupe lecteurXX sur les éventuels futures objets créés par garyXX(on admet pour les besoins de la démonstration que garyXX aura des droits decréation dans le schéma consultation).Relancer la boîte de dialogue des propriétés du schéma consultation. Nous allons

20 - https://docs.postgresql.fr/9.5/sql-alterdefaultprivileges.html

La gestion des droits

37

Page 35: Administration de PostgreSQL/PostGIS

utiliser l'onglet Privilèges par défaut pour disposer du caneva de l'ordre SQL...

Dans l'onglet Tables, ajouter une

ligne en cliquant sur la croix à droite. Choisir le bénéficiaire lecteurXX, (remplacer XX par votre numéro) Dans la colonne 'droits' activer SELECT

Dans la version 4.11 de pgadmin, il n'est pas possible de choisir l'accordeur de droitqui est par défaut le propriétaire du schéma, hors nous voulons absolument quel'accordeur de droit soit garyXX pour que les droits par défaut s'appliquant aux futursobjets créés par lui.Aller dans l'onglet SQL et copier l'ordre SQL (sélectionner les lignes et appuyez queCTRL C) :ALTER DEFAULT PRIVILEGES IN SCHEMA consultation

GRANT SELECT ON TABLES TO lecteur00;

Activer l'éditeur de requête en cliquant sur

Copier (CTRL V) le SQL dans l'éditeur de requête.Important : Pour indiquer que ce sont les droits par défaut pour les éventuels futursobjets de garyXX, nous allons modifier l'ordre SQL dans l'éditeur, pour prendreprovisoirement le rôle de garyXX avec une instruction SQL SET ROLE juste avant leALTER DEFAULT PRIVILEGES

Ceci est possible car vous devez être connecté avec le rôle de connexion stageXX quiest SUPERUSER et qui a donc le droit d'utiliser SET ROLE.(pour utiliser SET ROLE nomrole, Il est obligatoire que l'utilisateur de la sessioncourante soit membre du rôle nomrole - si l'utilisateur de la session estsuperutilisateur, tous les rôles sont utilisables.)Ajouter SET ROLE garyXX ; avant ALTER DEFAULT... et RESET ROLE (pourréinitialiser le rôle à la valeur de la session) en dernière ligne.La commande complète dans l'éditeur SQL doit donc être :SET ROLE garyXX ;

ALTER DEFAULT PRIVILEGES IN SCHEMA consultation

GRANT SELECT ON TABLES TO lecteurXX;RESET ROLE ;

Exécuter la commande SQL en cliquant sur

Vous devez avoir un message 'Requête exécutée avec succès en 67 msecEn étant positionné sur le schéma consultation dans le navigateur, vérifier dansl'onglet propriété du schéma production que vous avez bien : droits par défaut de latable 'lecteur00=r/gary00'

La gestion des droits

38

Page 36: Administration de PostgreSQL/PostGIS

(Remplacer le 00 par votre numéro de stagiaire)Ceci indique que gary00 a octroyé les privilèges r (SELECT) au rôle lecteur00

Vérifier maintenant les droits dans DBManager en actualisant avec le bouton

Constater que, sur le schéma, l'utilisateur garyXX a maintenant le privilègeAccéder aux objets

Se positionner sur la table commune dans le schéma consultation : constaterque l'utilisateur n'a aucun privilège.

En effet nous avons indiqué les droits par défaut qui sont les droits qui serontappliqués par défaut aux futurs objets, mais qui ne s'appliquent pas auxobjets existants.

La gestion des droits

39

Page 37: Administration de PostgreSQL/PostGIS

Sous PgAdmin, faire un clic droit sur leschéma consultation, puis Assistant degestion des droits.Cliquer sur la case à cocher en haut àgauche pour tout cocher

La gestion des droits

40

Page 38: Administration de PostgreSQL/PostGIS

Appuyer sur le bouton 'suivant' et ajouterles privilèges SELECT et USAGE pour lerôle lecteurXX.Appuyer à nouveau suur 'suivant' etVérifier l'ordre SQL :GRANT SELECT, USAGE ON SEQUENCEconsultation.commune_id_seq TO GROUP lecteurXX;GRANT SELECT ON TABLE consultation.commune TO GROUP lecteurXX;

Terminer.

Vérifier les droits sous QGIS : vérifier que la table commune est

maintenant chargeable sousQGIS par un glisser-lâcher dansQGIS, ou par un clic droit

'ajouter au canevas'. Vérifier que cette table n'est pas modifiable sous QGIS.

Complément : droit par défaut sur les schémaIl faut bien comprendre que les droits par défaut sur les schémas ne s'appliquent quepour les futurs objets crées par un utilisateur ou un rôle dont il est membre.Sous pgadmin on ne voit dans l'onglet propriétés -> sécurité qu'une seule lignedécrivant les droits par défaut pour les tables, mais on peut très bien avoir plusieursrôles ayant attribués des droits par défaut.Pour avoir une vision exhaustive on peut utiliser la requête suivante :SELECT

nspname, -- schema namedefaclobjtype, -- object type

defaclacl -- default access privilegesFROM pg_default_acl a JOIN pg_namespace b ON a.defaclnamespace=b.oid;

La gestion des droits

41

Page 39: Administration de PostgreSQL/PostGIS

qui renvoi par exemple si gary16b est un deuxième rôle de connexion membre deécrivains16 ayant attribués des droits par défaut en lecture sur ses futures objets :

On a donc ici deux lignes décrivant les droits par défaut de gary16 et gary16b sur leschéma consultation.Il est possible d'attribuer des droits par défaut directement dans une suite decommande SQL, par exemple :

E. 01 (tutoré) - gestion des droits

Après le cours et l'exercice guidé, voici un exercice à effectuer seul sur la gestion desdroits : se positionner sous PgAdmin sur le schéma production.

Q u e s t i o n

Mettre en pratique les acquis pour faire en sorte que garyXX : puisse créer de nouvelles tables. dispose des droits sur les tables existantes (ajouter, modifier et supprimer des

enregistrements) du schéma production Dispose des droits d'écriture sur les objets créé par stageXX dans le schéma

La gestion des droits

42

Page 40: Administration de PostgreSQL/PostGIS

productionPour vérifier cette dernière possibilité , charger dans QGIS la tablecommune_densite.shp (fournie dans les données du stage) avec le rôle stageXX

et utiliser le bouton de DBManager pour charger cette couche dans le schéma

production (on appellera la table commune_densite et on n'utilisera pas d'option decréation que nous verrons plus loin dans le cours).Changer de connexion pour vous connectez avec le rôle garyXX et vérifier lesprivilèges.Faire également en sorte que michaelXX puisse accéder en lecture au schémaproduction.Consigne : Envoyer un message aux tuteurs pour indiquer que vous avez réalisél'exercice en rappelant votre numéro de stagiaire.Si vous avez mis des mots de passe autres que le nom de login pour garyXX etmichaelXX, merci de les communiquer aux tuteurs.

La gestion des droits

43

Page 41: Administration de PostgreSQL/PostGIS

III - Sauvegarde et restauration

III

Sauvegarde logique (dump) 44

Sauvegarder le serveur (pg_dumpall) 50

Restauration logique 50

02 - sauvegarde et restauration 52

Le cas particulier de l'import des fichiers fonciers 53

Sauvegarde au niveau système de fichiers 54

Archivage continu 55

Une stratégie de sauvegarde doit être définie. Elle dépend du niveau de sécurité requis.Elle doit s'inscrire dans une démarche plus globale d'analyse de la sécurité des systèmesd'information et dépend des systèmes physiques mis en place (disque RAID, baie SAN,...).exemple de stratégie (mise en place en DDTM 76) :

sauvegarde hebdomadaire pour les bases peu évolutive, sauvegarde journalière pourles autres.

Duplication de sauvegarde sur une baie de disque et duplication de la sauvegarde surun serveur distant par FTP

conservation des fichiers de sauvegarde sur un mois avec effacement automatique au-delà

effacement manuel en cas de saturation (transmission d'un rapport de sauvegarde parmel)

45

Page 42: Administration de PostgreSQL/PostGIS

Il y a trois approches fondamentalement différentes pour sauvegarder les données dePostgreSQL :

la sauvegarde logique ; la sauvegarde au niveau du système de fichiers ; l'archivage continu.

Chacune a ses avantages et ses inconvénients.

A. Sauvegarde logique (dump)

Sauvegarder (pg_dump) avec PgAdminLe principe est de produire un fichier texte de commandes SQL (appelé « fichierdump »), qui, si on le renvoie au serveur, recrée une base de données identique àcelle sauvegardée. PostgreSQL propose pour cela le programme utilitaire pg_dump.L'usage basique en ligne de commande est :pg_dump base_de_donnees > fichier_de_sortiela sauvegarde peut être effectuée depuis n'importe quel ordinateur ayant accès à labase. Pg_dump doit avoir un accès en lecture à toutes les tables que vous voulezsauvegarder, donc pour sauvegarder une base complète, vous devez pratiquementtoujours utiliser un superutilisateur.Un des gros avantages de pg_dump sur les autres méthodes de sauvegarde est quela sortie de pg_dump peut être généralement re-chargée dans des versions plusrécentes de PostgreSQL, alors que les sauvegardes au niveau fichier et l'archivagecontinu sont tous les deux très spécifiques à la version du serveur. Pg_dump est aussila seule méthode qui fonctionnera lors du transfert d'une base de données vers unemachine d'une architecture différente (par exemple d'un serveur 32 bits à un serveur64 bits).Les options de la Pg_dump en ligne de commande sont décrites ici21

21 - https://docs.postgresql.fr/9.6/app-pgdump.html

Sauvegarde et restauration

46

Page 43: Administration de PostgreSQL/PostGIS

Nous allons les examiner au travers de l'interface de pgadmin :

MéthodeSous pgadmin Clic droit sur une base sauvegarder (ou menu Outils → → sauvegarder).

Les différents formats sont proposés : Personnalisé : archive

personnalisée utilisable parpg_restore. Avec le format desortie répertoire, c'est le formatle plus souple, car il permet lasélection manuelle et le

réordonnancement des objets archivés au moment de la restauration. Ceformat est aussi compressé par défaut.

Tar : archive tar utilisable par pg_restore. Le format tar est compatible avec leformat répertoire; l'extraction d'une archive au format tar produit une archiveau format répertoire valide. Toutefois, le format tar ne supporte pas lacompression et a une limite de 8Go sur la taille des tables individuelles. Parailleurs, l'ordre de restauration des données des tables ne peut pas êtrechangé au moment de la restauration.

Fichier plat : fichier de scripts SQL en texte simple. Ce format offre unegrande souplesse à la restauration des données, lors d'un changement deversion de PostgreSQL ou pour utiliser les données dans d'autres SGBD.

Répertoire : Produire une archive au format répertoire utilisable en entrée depg_restore. Cela créera un répertoire avec un fichier pour chaque table et blobexporté, ainsi qu'un fichier appelé Table of Contents (Table des matières)décrivant les objets exportés dans un format machine que pg_restore peutlire. Une archive au format répertoire peut être manipulée avec des outils Unixstandard; par exemple, les fichiers d'une archive non-compressée peuventêtre compressés avec l'outil gzip. Ce format est compressé par défaut etsupporte les sauvegardes parallélisées.

Les autres options sont : Encodage : Par défaut, la sauvegarde utilise celui de la base de données Nombre de tâches : Exécute une sauvegarde parallélisée. Cette option réduit

la durée de la sauvegarde mais, elle augmente aussi la charge sur le serveurde base de données. Vous ne pouvez utiliser cette option qu'avec le format desortie répertoire car c'est le seul format où plusieurs processus peuvent écrireleurs données en même temps.

Rôle : Spécifie un rôle à utiliser pour créer la sauvegarde. Avec cette option,pg_dump utilise une commande SET ROLE nomrole après s'être connecté à labase. C'est utile quand l'utilisateur authentifié n'a pas les droits dont pg_dumpa besoin, mais peut basculer vers un rôle qui les a. Certaines installations ontune politique qui est contre se connecter directement en tant quesuperutilisateur, et l'utilisation de cette option permet que les extractionssoient faites sans violer cette politique.

Sauvegarde et restauration

47

Page 44: Administration de PostgreSQL/PostGIS

Méthode : Onglet "Options de sauvegarde"

Sections : Sauvegarde seulement lessections indiquées (pre-données,données ou post-données). (Par défauttoutes les sections).La section ‘données' contient toutes lesdonnées des tables ainsi que la définitiondes Large Objects et les valeurs des

séquences.Exemple en SQL : COPY commune (id, geom, ...)

Les éléments ‘post-données' incluent la définition des index, triggers, règles etcontraintes (autres que les contraintes de vérification).Exemple en SQL : ALTER TABLE ONLY "TRONCON_ROUTE"ADD CONSTRAINT "TRONCON_ROUTE_pkey" PRIMARY KEY (id);

Les éléments ‘pré-données' incluent tous les autres éléments de définition.Exemple en SQL : CREATE TABLE commune (id integer NOT NULL,...)

Type des objets : Données uniquement : (--data-only). Seules les données sont

sauvegardées, pas le schéma (définition des données). Les données destables, les Large Objects, et les valeurs des séquences sont sauvegardées.Cette option est similaire à cocher ‘données' dans ‘sections' mais, pour desraisons historiques, elle n'est pas identique.

Schéma uniquement : Seule la définition des objets (le schéma) estsauvegardée, pas les données. Cette option est l'inverse de ‘donnéesuniquement'. Elle est similaire, mais pas identique (pour des raisonshistoriques), à cocher Pré-données et post-données dans ‘sections'.

Blobs : Inclut les objets larges (blob) dans la sauvegarde. C'est lecomportement par défaut, sauf si une des options suivantes est ajoutée : --schema, --table ou --schema-only. L'option -b n'est utile que pour ajouter lesobjets larges aux sauvegardes sélectives.

Ne pas sauvegarder : propriétaire (--no-owner) : Les commandes d'initialisation des possessions

des objets au regard de la base de données originale ne sont pas produites.L'option -O est utilisée pour créer un script qui puisse être restauré parn'importe quel utilisateur. En revanche, c'est cet utilisateur qui devientpropriétaire de tous les objets à la restauration.

Droits (--no-privileges ) : Les droits d'accès (commandes grant/revoke) nesont pas sauvegardés.

Tablespace (--no-tablespaces ) : Ne pas générer de commandes pour créerdes tablespace, ni sélectionner de tablespace pour les objets. Avec cetteoption, tous les objets seront créés dans le tablespace par défaut durant larestauration.

Données de la table non enregistrées dans les journaux (--no-unlogged-table-data ) : Ne pas exporter le contenu des tables non journalisées(unlogged)

Sauvegarde et restauration

48

Page 45: Administration de PostgreSQL/PostGIS

Méthode : Options de sauvegarde (suite)

Sauvegarde et restauration

49

Page 46: Administration de PostgreSQL/PostGIS

Requêtes : Utiliser les INSERT avec noms

de colonnes (--column-inserts ) : Extraire les données entant que commandes INSERTavec des noms de colonnesexplicites (INSERT INTO table(colonne, ...) VALUES ...). Cecirendra la restauration très lente ;c'est surtout utile pour créer desextractions qui puissent êtrechargées dans des bases dedonnées autres que PostgreSQL.

Utiliser des commandesINSERT (--inserts ) : Extraire les données en tant que commandes INSERT(plutôt que COPY). Ceci rendra la restauration très lente ; c'est surtout utilepour créer des extractions qui puissent être chargées dans des bases dedonnées autres que PostgreSQL, Notez que la restauration peut échouercomplètement si vous avez changé l'ordre des colonnes. L'option --column-inserts est plus sûre, mais encore plus lente.

Utiliser l'instruction CREATE DATABASE (--create ) : La sortie desauvegarde débute par une commande de création de la base de données etde connexion à cette base. Peu importe, dans ce cas, la base de données deconnexion à la restauration. De plus, si --clean est aussi spécifié (DROPDATABASE), le script supprime puis crée de nouveau la base de données cibleavant de s'y connecter

Utiliser l'instruction DROP DATABASE (--clean): Les commandes denettoyage (suppression) des objets de la base sont écrites avant lescommandes de création.

Désactiver : trigger (déclencheurs) (--disable-triggers ) : Cette option ne s'applique que

dans le cas d'une extraction de données seules. Ceci demande à pg_dumpd'inclure des commandes pour désactiver temporairement les triggers sur lestables cibles pendant que les données sont rechargées. Utilisez ceci si, sur lestables, vous avez des contraintes d'intégrité ou des triggers que vous nevoulez pas invoquer pendant le rechargement. Cette option n'a de sens quepour le format texte simple (SQL). Pour les formats d'archive, vous pouvezspécifier cette option quand vous appelez pg_restore. À l'heure actuelle, lescommandes émises pour --disable-triggers doivent être exécutées en tant quesuperutilisateur.

Guillemet dollar (--disable-dollar-quoting ) : Cette option désactivel'utilisation du caractère dollar comme délimiteur de corps de fonctions, etforce leur délimitation en tant que chaîne SQL standard.

Divers : Avec OID (--oids ) : Les identifiants d'objets (OID) sont sauvegardés comme

données des tables. Cette option est utilisée dans le cas d'applications utilisantdes références aux colonnes OID (dans une contrainte de clé étrangère, parexemple). Elle ne devrait pas être utilisée dans les autres cas.

Message en verbeux (--verbose ) : Mode verbeux. pg_dump affiche descommentaires détaillés sur les objets et les heures de début et de fin dans lefichier de sauvegarde. Des messages de progression sont également affichéssur la sortie d'erreur standard.

Sauvegarde et restauration

50

Page 47: Administration de PostgreSQL/PostGIS

Forcer les guillemets doubles des identifiants (--quote-all-identifiers ) :Force la mise entre guillemets de tous les identifiants. Ceci peut être utile sivous exportez votre base en vue d'une migration dans une nouvelle versionqui aurait introduit de nouveaux mots clés.

Utilisez SET SESSION AUTHORIZATION (--use-set-session-authorization):Émettre des commandes SQL standard SET SESSION AUTHORIZATION à laplace de commandes ALTER OWNER pour déterminer l'appartenance d'objet.Ceci rend l'extraction davantage compatible avec les standards, mais, suivantl'historique des objets de l'extraction, peut ne pas se restaurer correctement.Par ailleurs, une extraction utilisant SET SESSION AUTHORIZATIONnécessitera certainement des droits superutilisateur pour se restaurercorrectement, alors que ALTER OWNER nécessite des droits moins élevés

Méthode : rapport de sauvegarde

Pendant la sauvegarde un messageapparaît :

Il est possible de demander plus de détails sur la sauvegarde avec le bouton 'Moredétails...'

ComplémentEn ligne de commande, il est possible de ‘dumper' une base directement dans uneautre sans passer par un fichier intermédiaire.La commande sera du type :pg_dump -h serveur1 base_de_donnees | psql -h serveur2 base_de_donnees

ConseilAprès la restauration d'une sauvegarde, il est conseillé d'exécuter ANALYZE surchaque base de données pour que l'optimiseur de requêtes dispose de statistiquesutiles.On utilise pour cela le menu Outils-> maintenance puis ANALYZE.

Sauvegarde et restauration

51

Page 48: Administration de PostgreSQL/PostGIS

B. Sauvegarder le serveur (pg_dumpall)

pg_dumpall permet de sauvegarder toutes les bases de données d'une instance dansle format PLAIN (format texte SQL). pg_dumpall sauvegarde aussi les objets globaux,communs à toutes les bases de données (pg_dump ne sauvegarde pas ces objets.)Cela inclut aussi les informations concernant les utilisateurs et groupes des bases dedonnées, ainsi que les tablespaces et les propriétés telles que les droits d'accès s'yappliquant.

Sauvegarde et restauration

52

Page 49: Administration de PostgreSQL/PostGIS

Avec PgAdmin, sur clic droit sur un serveur sauvegarder le serveur, on obtient la→ boîte de dialogue :

C. Restauration logique

pg_restore sous PgAdminLa restauration de données peut s'effectuer avec l'outil pg_restore pour les formatsbinaires et avec psql pour les sauvegardes en format texte SQL.

Sauvegarde et restauration

53

Page 50: Administration de PostgreSQL/PostGIS

MéthodeAvec pgadmin, se positionner dans une base de données, puis clic droit restaurer→ :

Constater que seul les formatspersonnalisé ou tar et répertoire sontdisponibles.Nombre de tâches (--jobs ) : Exécuteles parties les plus consommatrices entemps de pg_restore -- celles deschargements de données, créations

d'index et créations de contraintes -- en utilisant plusieurs jobs concurrents. Cetteoption peut réduire de beaucoup le temps pour restaurer une grosse base de donnéespour un serveur fonctionnant sur une machine multi-processeurs. La valeur optimalepour cette option dépend de la configuration matérielle du serveur, du client et duréseau. Les facteurs incluent le nombre de cœurs CPU et la configuration disque. Unbon moyen pour commencer est le nombre de cœurs CPU du serveur, mais unevaleur plus grande que ça peut amener des temps de restauration encore meilleursdans de nombreux cas. Bien sûr, les valeurs trop hautes apporteront desperformances en baisse.Seuls les formats d'archivage personnalisé et répertoire sont supportés avec cetteoptionRôle (--role ) : Indique un nom de rôle utilisé pour la restauration. Cette option faitque pg_restore exécute un SET ROLE nom_rôle après connexion à la base dedonnées. C'est utile quand l'utilisateur authentifié (indiqué par l'option -U) n'a pas lesdroits demandés par pg_restore, mais peut devenir le rôle qui a les droits requis.Certains installations ont une politique contre la connexion en super-utilisateurdirectement, et utilisent cette option pour permettre aux restaurations de se fairesans violer cette règle.

Sauvegarde et restauration

54

Page 51: Administration de PostgreSQL/PostGIS

Méthode : Onglet "Options de restauration"

Sections : Restaure seulement lasection nommée (Par défaut toutes lessections).Type des objets :

Données uniquement : (--data-only). Restaure seulement lesdonnées, pas les schémas(définitions des données). Les

données des tables, les Large Objects, et les valeurs des séquences sontrestaurées si elles sont présentes dans l'archive.

Cette option est similaire à --section=data mais, pour des raisons historiques, ellen'est pas identique.

Schéma uniquement (--schema-only ) : Restaure seulement le schéma(autrement dit, la définition des données), mais pas les données, à conditionque cette définition est présente dans l'archive.

Ne pas enregistrer : propriétaire (--no-owner) : Ne pas donner les commandes initialisant les

propriétaires des objets pour correspondre à la base de données originale. Pardéfaut, pg_restore lance des instructions ALTER OWNER ou SET SESSIONAUTHORIZATION pour configurer le propriétaire des éléments du schéma créé.Ces instructions échouent sauf si la connexion initiale à la base de données estréalisée par un superutilisateur (ou le même utilisateur que le propriétaire desobjets du script)

Droits (--no-privileges ) : Empêche la restauration des droits d'accès(commandes grant/revoke).

Tablespace (--no-tablespaces ) : Ne sélectionne pas les tablespaces. Aveccette option, tous les objets seront créés dans le tablespace par défaut lors dela restauration.

Sauvegarde et restauration

55

Page 52: Administration de PostgreSQL/PostGIS

Méthode : Option de restauration (suite)

Requête : Inclure l'instruction CREATE

DATABASE (--create ) : Crée labase de données avant de larestaurer. Si l'option --clean estaussi indiquée, supprime puiscrée de nouveau la base dedonnées cible avant de s'yconnecter.

Nettoyer avant restauration (--clean): Nettoie (supprime) les objets de labase de données avant de les créer.

Transaction simple (--single-transaction) : Exécute la restauration en uneseule transaction (autrement dit, toutes les commandes de restauration sontplacées entre un BEGIN et un COMMIT). Ceci assure l'utilisateur que soittoutes les commandes réussissent, soit aucun changement n'est appliqué.

Désactiver : trigger (--disable-triggers ) : Cette option n'est pertinente que lors d'une

restauration des données seules. Elle demande à pg_restore d'exécuter descommandes pour désactiver temporairement les déclencheurs sur les tablescibles pendant que les données sont rechargées. Utilisez ceci si vous avez desvérifications d'intégrité référentielle sur les tables que vous ne voulez pasappeler lors du rechargement des données. Actuellement, les commandesémises pour --disable-triggers doivent être exécutées par un superutilisateur

Aucune données pour les tables en échec (--no-data-for-failed-tables ) :Par défaut, les données de la table sont restaurées même si la commande decréation de cette table a échoué (par exemple parce qu'elle existe déjà). Aveccette option, les données de cette table seront ignorées. Ce comportement estutile si la base cible contient déjà des données pour cette table. Par exemple,les tables supplémentaires des extensions de PostgreSQL comme PostGISpourraient avoir déjà été créées et remplies sur la base cible ; indiquer cetteoption empêche l'ajout de données dupliquées ou obsolètes.

Divers / comportement : Message verbeux (--verbose ) : Mode verbeux. On décochera cette option

lors de la restauration de gros fichiers de backup.Utilisez SET SESSION AUTHORIZATION (--use-set-session-authorization):Affiche les commandes SET SESSION AUTHORIZATION du standard SQL à laplace des commandes ALTER OWNER pour déterminer le propriétaire del'objet. Ceci rend la sauvegarde plus compatible avec les standards mais,suivant l'historique des objets dans la sauvegarde, pourrait restaurercorrectement.

Sortie sur erreur (--exit-on-error) : Quitte si une erreur est rencontrée lorsde l'envoi des commandes SQL à la base de données. La valeur par défaut estde continuer et d'afficher le nombre d'erreurs à la fin de la restauration.

Sauvegarde et restauration

56

Page 53: Administration de PostgreSQL/PostGIS

D. 02 - sauvegarde et restauration

Mise en pratique d'une sauvegarde et restauration pour dupliquer deux schémasd'une base

Q u e s t i o n

[Solution n°1 p 67]

Nous souhaitons dupliquer les schémas consultation et production dans une nouvellebase de données. Avec la version 4.11 de pgadmin, il n'est pas possible de choisir les schémas àsauvegarder dans les options de sauvegarde au niveau base de données. Il faut doncprocéder à la sauvegarde de chaque schéma et les restaurer successivement.Réaliser des sauvegardes (dump) de chaque schéma consultation et production de labase droitXX. On utilisera le format ‘personnalisé'.Créer une nouvelle base newdroitXX (propriétaire stageXX).Restaurer dans cette nouvelle base les deux schémas.

E. Le cas particulier de l'import des fichiers fonciers

Antérieurement les fichiers fonciers étaient livrés sous forme de dump PostGIS.Comme indiqué sur cette page 22, les fichiers fonciers sont désormais livrés au formatSQL.La fiche 23décrit comment procéder.

22 - http://www.geoinformations.developpement-durable.gouv.fr/aide-technique-pour-l-exploitation-des-donnees-r757.html

23 - http://www.geoinformations.developpement-durable.gouv.fr/fichier/pdf/import_tables_principales_ff_cle54c2ec.pdf?arg=177833690&cle=7e5eea2d5f890d7f670376194199c6fc707f8ac1&file=pdf%2Fimport_tables_principales_ff_cle54c2ec.pdf

Sauvegarde et restauration

57

Page 54: Administration de PostgreSQL/PostGIS

A titre d'exemple nous allons utiliser une procédure légèrement différente en utilisantune console PSQL (voir ) pour restaurer dans la base stageXX :

Nous pouvons utiliser la commande \i pour exécuter le script de commande SQLff_annexes_metropole_2013.sql qui vous est fourni dans le jeux de données.(il s'agit d'un jeu de fichier fictif qui ne contient qu'une seule ligne)taper la commande :\i i :/ff_annexes_metropole_2013.sql

remplacer le i :/ par le chemin d'accès au jeu de données.(si le chemin comporte un blanc il faut le mettre entre ' ' simple)Vous devez voir défiler la liste des commandes SQL qui se termine par une ALTERTABLE

fermer la console par \q

Vous pouvez vérifier que le schéma ff_annexes_metropole_2013 a bien été créédans la base stage00 et qu'il contient une table f_2013_commune

Sauvegarde et restauration

58

Page 55: Administration de PostgreSQL/PostGIS

F. Sauvegarde au niveau système de fichiers

Une autre stratégie de sauvegarde (pour les administrateurs systèmes) consiste àcopier les fichiers utilisés par PostgreSQL pour le stockage des données. Par défaut,les fichiers de base de données sont stockés dans le répertoire DATA de POSTGRE.N'importe quelle méthode de sauvegarde peut être utilisée, par exemple :tar -cf sauvegarde.tar /usr/local/pgsql/data

Cependant, deux restrictions rendent cette méthode peu pratique ou en tout cas

Sauvegarde et restauration

59

Page 56: Administration de PostgreSQL/PostGIS

inférieure à la méthode pg_dump. Le serveur de base de données doit être arrêté pour obtenir une sauvegarde

utilisable Les sauvegardes du système de fichiers fonctionnent uniquement pour les

restaurations complètes d'un cluster de bases de donnéesNous ne rentrerons donc pas plus dans le cadre de cette formation sur ce type desauvegarde.Pour en savoir plus24...

G. Archivage continu

PostgreSQL maintient en permanence des journaux WAL (write ahead log). Cesjournaux décrivent chaque modification effectuée sur les fichiers de données desbases. Ils existent principalement pour se prémunir des suites d'un arrêt brutal : si lesystème s'arrête brutalement, la base de données peut être restaurée dans un étatcohérent en « rejouant » les entrées des journaux enregistrées depuis le dernier pointde vérification.Cette approche est plus complexe que les autres. Pour en savoir plus25...

24 - http://docs.postgresql.fr/9.6/backup-file.html25 - http://docs.postgresql.fr/9.6/continuous-archiving.html

Sauvegarde et restauration

60

Page 57: Administration de PostgreSQL/PostGIS

IV - Maintenance IV

Gestion de l'espace disque 57

Opérations de maintenance sur les bases 59

A. Gestion de l'espace disque

Chaque table est composée d'un fichier disque principal. Si la table contient descolonnes pouvant recevoir des valeurs étendues, il pourrait aussi y avoir un fichierTOAST associé à la table. Des index peuvent également être associés.Chaque table ou index est stocké dans un fichier distinct ou plusieurs si la taille dufichier dépasse 1 Go.L'espace disque peut être surveillé de plusieurs façons différentes : en utilisant lesfonctions SQL listées dans Tableau 9.70, « Fonctions de calcul de la taille des objetsde la base de données »26, en utilisant le module oid2name27(1) ou en inspectantmanuellement les catalogues système. Les fonctions SQL sont les plus simples àutiliser et sont généralement recommandées.

Méthode : Connaître l'espace disque consommé par une table

26 - http://docs.postgresql.fr/9.4/functions-admin.html#functions-admin-dbsize27 - http://docs.postgresql.fr/9.4/oid2name.html

61

Page 58: Administration de PostgreSQL/PostGIS

Pour connaître l'espace disque consommé par une table, avec pgadmin : sepositionner dans l'onglet statistique sur un table :

Dans cet exemple la taille de commune_densite est de 56 Ko, la table d'index fait 16Ko.La table TOAST28 (The Oversized-Attribute Storage Technique ) permet de stocker lesattributs trop grands (typiquement les données géométriques). Ceci est transparentpour l'utilisateur.On peut également utiliser des requêtes comme :SELECTrelname as "Table",

pg_size_pretty(pg_total_relation_size(relid)) As "Size",pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid))as "External Size"

28 - http://docs.postgresql.fr/9.4/storage-toast.html

Maintenance

62

Page 59: Administration de PostgreSQL/PostGIS

FROM pg_catalog.pg_statio_user_tables ORDER BYpg_total_relation_size(relid) DESC;

qui indique :le nom de la tablela taille de la tableles tailles des objets liés (comme les index)La tâche la plus importante d'un administrateur de base de données, en ce quiconcerne la surveillance des disques, est de s'assurer que les disques n'arrivent pas àsaturation29.

B. Opérations de maintenance sur les bases

Sous PgAdmin il est possible d'utiliser le menu Outils > Maintenance...celui-ci permet de lancer différentes opération de maintenance.

29 - http://docs.postgresql.fr/9.6/disk-full.html

Maintenance

63

Page 60: Administration de PostgreSQL/PostGIS

Méthode : VACUUMVACUUM récupère l'espace inutilisé et, optionnellement, analyse une base.VACUUM récupère l'espace de stockage occupé par des lignes mortes. Lors desopérations normales de PostgreSQL, les lignes supprimées ou rendues obsolètes parune mise à jour ne sont pas physiquement supprimées de leur table. Elles restentprésentes jusqu'à ce qu'un VACUUM soit lancé. C'est pourquoi, il est nécessaire defaire un VACUUM régulièrement, spécialement sur les tables fréquemment mises àjour.Sans paramètre, VACUUM traite toutes les tables de la base de données courantepour lequel l'utilisateur connecté dispose du droit d'exécution du VACUUM. Avec unparamètre, VACUUM ne traite que cette table.Les options :

FULL récupère plus d'espace (compactage des tables), mais est beaucoup pluslong et prend un verrou exclusif sur la table (inaccessible à d'autres requêtespendant le VACCUM). Cette méthode requiert aussi un espace disquesupplémentaire, car elle écrit une nouvelle copie de la table et ne supprimel'ancienne copie qu'à la fin de l'opération. Habituellement, cela doit seulementêtre utilisé quand une quantité importante d'espace doit être récupérée de latable. .

FREEZE : les versions des lignes sont gelées si elles sont suffisamment vieillespour être visibles de toutes les transactions en cours. En particulier, sur unebase en lecture seulement, VACUUM FREEZE aura pour résultat de geler toutesles lignes de la base. Donc, tant que la base n'est pas modifiée, aucunnettoyage supplémentaire n'est nécessaire.

ANALYZE : Met à jour les statistiques utilisées par l'optimiseur pourdéterminer la méthode la plus efficace pour exécuter une requête.

Pour exécuter un VACUUM sur une table, vous devez habituellement être lepropriétaire de la table ou un superutilisateur. Néanmoins, les propriétaires de la basede données sont autorisés à exécuter VACUUM sur toutes les tables de leurs bases de

Maintenance

64

Page 61: Administration de PostgreSQL/PostGIS

données, sauf sur les catalogues partagés. Cette restriction signifie qu'un vraiVACUUM sur une base complète ne peut se faire que par un superutilisateur.)Il est recommandé que les bases de données actives de production soient traitées parVACUUM fréquemment (au moins toutes les nuits), pour supprimer les lignes mortes.Après avoir ajouté ou supprimé un grand nombre de lignes, il peut être utile de faireun VACUUM ANALYZE sur la table affectée. Cela met les catalogues système à jour detous les changements récents et permet à l'optimiseur de requêtes de PostgreSQL™de faire de meilleurs choix lors de l'optimisation des requêtesPostgreSQL inclut un « autovacuum30 » qui peut automatiser la maintenance parVACUUM. Certains administrateurs de bases de données voudront suppléer ouremplacer les activités du démon avec une gestion manuelle des commandesVACUUM, qui seront typiquement exécutées suivant un planning par des scripts cronou par le planificateur de tâches.A noter que si on est positionné dans le navigateur au niveau d'un objet (table,...) lamaintenance ne s’exécutera qu'au niveau de l'objet sélectionné.À noter que le VACCCUM est également disponible pour l'administrateur système sousforme de la commande système vacuumdb.

Méthode : ANALYZEANALYZE31 collecte des statistiques sur le contenu des tables de la base de donnéeset stocke les résultats dans le catalogue système pg_statistic32. L'optimiseur de requêtes les utilise pour déterminer les plans d'exécution les plusefficaces.ANALYZE peut être exécuté comme une option de VACUUM.

Méthode : REINDEXREINDEX reconstruit un index en utilisant les données stockées dans la table,remplaçant l'ancienne copie de l'index. Il y a plusieurs raisons pour utiliser REINDEX :

Un index a été corrompu et ne contient plus de données valides L'index en question a « explosé », c'est-à-dire qu'il contient beaucoup de

pages d'index mortes ou presque mortes Vous avez modifié un paramètre de stockage (par exemple, fillfactor) pour un

index et vous souhaitez vous assurer que la modification a été prise encompte.

La construction d'un index avec l'option CONCURRENTLY a échoué, laissant unindex « invalide »

Dans les vieilles versions de PostgreSQL, le gain avec REINDEX peut-être énorme.Nota bene : disponible pour l'administrateur système avec la commandereindexdb33.

Méthode : CLUSTERCLUSTER commande permet de réécrire les données d'une table dans un ordredonné (suivant un index). Cela peut être utile pour optimiser des requêtes SQL, selonla façon dont les données sont accédées.Pour des tables spatiales, elle permet d'ordonner physiquement la table selon l'index

30 - http://docs.postgresql.fr/9.4/maintenance.html#autovacuum31 - http://docs.postgresql.fr/9.4/sql-analyze.html32 - http://docs.postgresql.fr/9.1/catalog-pg-statistic.html33 - http://docs.postgresql.fr/9.4/app-reindexdb.html

Maintenance

65

Page 62: Administration de PostgreSQL/PostGIS

géométrique et permet donc un accès aux enregistrements "proches" plus rapide.Attention toutefois : cette opération reste lourde puisqu'elle pause un verrou exclusifsur la table traitée (aucune autre action possible sur la table durant ce temps).

Maintenance

66

Page 63: Administration de PostgreSQL/PostGIS

Solution des exercices

> Solution n°1 (exercice p. 57)

sous PgAdmin se connecter avec un rôle superuser.Sur chacun des schéma consultation puis production de la base droitXX Faire clic droit sauvegarder→ sauvegarder

Choisir de ne pas enregistrer les 'tablespaces'Puis faire de même pour le schéma production.Créer la base newdroitXX avec comme propriétaire stageXX avec comme template(modèle) template_SIG (remplacer XX par votre numéro de stagiaire)Se positionner sur la base newdroitsXXfaire clic droit restaurer→ sauvegarderne pas oublier de demander de restaurer les pré-données, Données et post-données

67

Page 64: Administration de PostgreSQL/PostGIS

On peut vérifier par exemple que les droits du schéma ‘production' ont bien étérestaurés. (le cas échéant rafraîchir l'affichage pour faire apparaître les schémasrestaurés).

Solution des exercices

68

Page 65: Administration de PostgreSQL/PostGIS

Attention : pg_dump erreur : annulation à cause de la différence entre les versionsSi vous rencontrer des messages d'erreur concernant les versions de pg_dump, il fautpréciser à pgadmin d'aller chercher les bons exécutables binaires

Solution des exercices

69

Page 66: Administration de PostgreSQL/PostGIS

Solution des exercices

70