formation postgresql - mahoro netaterizak/0028pga-administration...administration postgresql 6...

275
Formation PostgreSQL Administration PostgreSQL Cette formation vous est proposée par BULL Formation : http://www.bull-formation.com En partenariat avec la société DALIBO : http://www.dalibo.com

Upload: others

Post on 16-Aug-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Formation PostgreSQL

Administration PostgreSQL

Cette formation vous est proposée par BULL Formation : http://www.bull-formation.com

En partenariat avec la société DALIBO : http://www.dalibo.com

Page 2: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Table des matièresAdministration PostgreSQL...............................................................................................................12Découvrir PostgreSQL........................................................................................................................12

1 Préambule..................................................................................................................................13 1.1 Au menu.............................................................................................................................13 1.2 Objectifs.............................................................................................................................14 1.3 Licence Creative Commons CC-BY-NC-SA.....................................................................14

2 Un peu d'histoire........................................................................................................................16 2.1 PostgreSQL ?!?!.................................................................................................................16 2.2 Principes fondateurs...........................................................................................................17 2.3 Origines..............................................................................................................................17 2.4 Origines (années 2000).......................................................................................................18 2.5 Progression du projet - échanges de mail...........................................................................19 2.6 Progression du code...........................................................................................................20

3 Les versions...............................................................................................................................21 3.1 Historique...........................................................................................................................21 3.2 Numérotation......................................................................................................................21 3.3 Versions courantes..............................................................................................................22 3.4 Version 8.2..........................................................................................................................23 3.5 Version 8.3..........................................................................................................................24 3.6 Version 8.4..........................................................................................................................25 3.7 Version 9.0..........................................................................................................................26 3.8 Version 9.1..........................................................................................................................26 3.9 Version 9.2..........................................................................................................................27 3.10 Quelle version utiliser ?...................................................................................................27 3.11 Versions dérivées..............................................................................................................28

4 Concepts de base........................................................................................................................29 4.1 ACID..................................................................................................................................29 4.2 MultiVersion Concurrency Control (MVCC)....................................................................30 4.3 MVCC et les verrous..........................................................................................................30 4.4 Transactions........................................................................................................................31 4.5 Write Ahead Logs, aka WAL..............................................................................................32 4.6 Avantages des WAL............................................................................................................33

5 Fonctionnalités...........................................................................................................................34 5.1 Fonctionnalités : développement........................................................................................34 5.2 Fonctionnalités : extensibilité............................................................................................35 5.3 Sécurité...............................................................................................................................36 5.4 Respect du Standard SQL..................................................................................................36 5.5 Vues....................................................................................................................................37 5.6 Schémas..............................................................................................................................38 5.7 Contraintes.........................................................................................................................38 5.8 Domaines............................................................................................................................39 5.9 Enums.................................................................................................................................40 5.10 Triggers.............................................................................................................................41 5.11 Index.................................................................................................................................42

2 / 275 http://www.bull-formation.com

Page 3: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6 Sponsors & Références..............................................................................................................43 6.1 Sponsors.............................................................................................................................43 6.2 Références..........................................................................................................................44 6.3 Yahoo..................................................................................................................................45

7 Conclusion.................................................................................................................................46 7.1 Bibliographie......................................................................................................................46 7.2 Questions............................................................................................................................47

Installation de PostgreSQL.................................................................................................................48 1 Introduction................................................................................................................................49

1.1 Licence Creative Commons CC-BY-NC-SA.....................................................................49 2 Installation à partir des sources..................................................................................................51

2.1 Téléchargement..................................................................................................................51 2.2 Compilation........................................................................................................................58 2.3 Compilation : options.........................................................................................................59 2.4 Compilation : options.........................................................................................................59 2.5 Tests de régression..............................................................................................................60 2.6 Installation..........................................................................................................................61 2.7 Post-installation 1/2............................................................................................................61 2.8 Post-installation 2/2............................................................................................................62 2.9 Lancement..........................................................................................................................64

3 Installation à partir des binaires.................................................................................................65 3.1 Paquets debian officiels......................................................................................................65 3.2 Backports Debian...............................................................................................................66 3.3 RedHat / Fedora / Suse.......................................................................................................66

4 Installation sous Windows.........................................................................................................68 4.1 Installeur graphique - bienvenue........................................................................................69 4.2 Installeur graphique - répertoire d'installation....................................................................70 4.3 Installeur graphique - répertoire données...........................................................................71 4.4 Installeur graphique - mot de passe....................................................................................72 4.5 Installeur graphique - port..................................................................................................73 4.6 Installeur graphique - autres...............................................................................................74 4.7 Installeur graphique - prêt..................................................................................................75 4.8 Installeur graphique - terminé............................................................................................76

5 Premiers réglages.......................................................................................................................77 5.1 Sécurité...............................................................................................................................77 5.2 Configuration minimale.....................................................................................................78 5.3 Configuration des connexions............................................................................................78 5.4 Configuration des ressources mémoires.............................................................................79 5.5 Configuration des journaux de transactions.......................................................................79 5.6 Configuration des ressources mémoires.............................................................................80 5.7 Configuration des démons..................................................................................................80 5.8 Démarrage..........................................................................................................................81 5.9 Tests....................................................................................................................................82

6 Mise à jour.................................................................................................................................83 6.1 Recommandations..............................................................................................................83 6.2 Sauvegarde.........................................................................................................................84 6.3 Mise à jour majeure 1/2 : Sauvegarde et Mise à jour.........................................................85 6.4 Mise à jour majeure 2/2 : Restauration..............................................................................86

7 Conclusion.................................................................................................................................87

3 / 275 http://www.bull-formation.com

Page 4: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.1 Pour aller plus loin.............................................................................................................87 7.2 Questions............................................................................................................................87

Travaux pratiques...............................................................................................................................88 1 Énoncés......................................................................................................................................89

1.1 Installation de paquets binaires..........................................................................................89 1.1.1 Pré-installation............................................................................................................89 1.1.2 Installation..................................................................................................................89 1.1.3 Démarrage..................................................................................................................89 1.1.4 Emplacement des fichiers...........................................................................................89 1.1.5 Configuration..............................................................................................................89 1.1.6 Jeu de données............................................................................................................89

1.2 Installation à partir des sources..........................................................................................89 1.2.1 Sauvegarde.................................................................................................................89 1.2.2 Téléchargement...........................................................................................................89 1.2.3 Environnement de compilation..................................................................................90 1.2.4 Compilation et installation.........................................................................................90 1.2.5 Lancement..................................................................................................................90

1.3 Migration des données.......................................................................................................90 1.3.1 Vérification.................................................................................................................90 1.3.2 Restauration................................................................................................................90

1.4 Pour aller plus loin.............................................................................................................90 2 Solutions....................................................................................................................................91

2.1 Installation de paquets binaires..........................................................................................91 2.1.1 Pré-installation............................................................................................................91 2.1.2 Installation..................................................................................................................91 2.1.3 Démarrage..................................................................................................................91 2.1.4 Emplacement des fichiers...........................................................................................91 2.1.5 Configuration..............................................................................................................92 2.1.6 Jeu de données............................................................................................................92

2.2 Installation à partir des sources..........................................................................................92 2.2.1 Sauvegarde.................................................................................................................92 2.2.2 Téléchargement...........................................................................................................92 2.2.3 Environnement de compilation..................................................................................92 2.2.4 Compilation et installation.........................................................................................93 2.2.5 Lancement..................................................................................................................93

2.3 Migration des données.......................................................................................................93 2.3.1 Vérification.................................................................................................................93 2.3.2 Restauration................................................................................................................93

Outils graphiques................................................................................................................................94 1 Préambule..................................................................................................................................95

1.1 Au menu.............................................................................................................................95 1.2 Objectifs.............................................................................................................................95 1.3 Licence Creative Commons CC-BY-NC-SA.....................................................................95

2 Druid..........................................................................................................................................97 2.1 Fonctionnalités (1/2)..........................................................................................................97 2.2 Fonctionnalités (2/2)..........................................................................................................97 2.3 Documentation de la base de données................................................................................98 2.4 Création d'une base............................................................................................................98 2.5 Création d'objets de base de données.................................................................................99

4 / 275 http://www.bull-formation.com

Page 5: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.6 Modification d'objets de base de données..........................................................................99 2.7 Types de données..............................................................................................................100 2.8 Gestion des tables.............................................................................................................100 2.9 Modification d'une table...................................................................................................101 2.10 Génération......................................................................................................................101 2.11 Production de code.........................................................................................................102 2.12 Vue entités/relations.......................................................................................................102 2.13 Vue entités/relations.......................................................................................................103

3 PgAdmin III.............................................................................................................................104 3.1 Présentation générale........................................................................................................104 3.2 Installation........................................................................................................................105 3.3 Fonctionnalités (1/2)........................................................................................................105 3.4 Fonctionnalités (2/2)........................................................................................................105 3.5 Connexion........................................................................................................................106 3.6 Édition des fichiers de configuration...............................................................................106 3.7 Tâches de maintenance.....................................................................................................107 3.8 Maintenance.....................................................................................................................107 3.9 Visualisation des verrous..................................................................................................108 3.10 Fenêtre des verrous.........................................................................................................108 3.11 Sauvegarde.....................................................................................................................109 3.12 Restauration....................................................................................................................109 3.13 Gestion des rôles............................................................................................................110 3.14 Gestion des tables...........................................................................................................111 3.15 Affichage des données....................................................................................................111 3.16 Gestion des objets...........................................................................................................112 3.17 Éditeur de requêtes.........................................................................................................112 3.18 Fenêtre de l'éditeur de requêtes......................................................................................113

4 pgAgent....................................................................................................................................114 4.1 Installation de pgAgent.....................................................................................................114 4.2 jobs...................................................................................................................................114 4.3 Planifier une tache de maintenance..................................................................................115 4.4 Étapes...............................................................................................................................115 4.5 Définir une étape..............................................................................................................116 4.6 Planification.....................................................................................................................116 4.7 Ecran de planification.......................................................................................................117

5 phpPgAdmin............................................................................................................................118 5.1 phpPgAdmin : présentation générale...............................................................................118 5.2 phpPgAdmin : Fonctionnalités 1/2...................................................................................119 5.3 phpPgAdmin : Fonctionnalités 2/2...................................................................................120 5.4 Arborescence - Aperçus....................................................................................................121

5.4.1 Détails.......................................................................................................................121 5.4.2 Groupes de serveurs.................................................................................................122

5.5 Arborescence - Tables, vues, séquences et fonctions.......................................................123 5.6 Arborescence - Détails table.............................................................................................124 5.7 Arborescence - Détails vue...............................................................................................125 5.8 Exécuter des requêtes.......................................................................................................126 5.9 Historique des requêtes....................................................................................................127 5.10 Recherche.......................................................................................................................128 5.11 Processus en cours..........................................................................................................129

5 / 275 http://www.bull-formation.com

Page 6: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.12 Visualisation des verrous................................................................................................130 5.13 Tâche de maintenance 1/3..............................................................................................131 5.14 Tâche de maintenance 2/3..............................................................................................132 5.15 Tâche de maintenance 3/3..............................................................................................133 5.16 Définition d'une table.....................................................................................................134 5.17 Information sur les tables...............................................................................................135

6 Conclusion...............................................................................................................................136 6.1 Bibliographie....................................................................................................................136 6.2 Questions..........................................................................................................................136

Travaux pratiques.............................................................................................................................137 1 Énoncés....................................................................................................................................138

1.1 pgAdmin...........................................................................................................................138 1.2 Druid................................................................................................................................139

2 Solutions..................................................................................................................................142 2.1 pgAdmin...........................................................................................................................142 2.2 Druid................................................................................................................................142

Tâches courantes...............................................................................................................................143 1 Introduction..............................................................................................................................144

1.1 Licence Creative Commons CC-BY-NC-SA...................................................................144 2 Gestion des bases.....................................................................................................................146

2.1 Création d'une base..........................................................................................................146 2.2 Suppression d'une base.....................................................................................................146 2.3 Configuration...................................................................................................................147 2.4 Modèle de base (ie. Template).........................................................................................147

3 Utilisateurs & Groupes............................................................................................................149 3.1 Versions............................................................................................................................149 3.2 Utilisateurs.......................................................................................................................150 3.3 Groupes............................................................................................................................150 3.4 Rôles.................................................................................................................................151 3.5 Options de ''CREATE ROLE''..........................................................................................151 3.6 SET ROLE.......................................................................................................................152 3.7 "REASSIGN OWNED" et "DROP OWNED".................................................................153 3.8 Attributs............................................................................................................................153 3.9 Droits................................................................................................................................154

4 Authentification du client.........................................................................................................155 4.1 Configuration du fichier pg_hba.conf (1/4).....................................................................155 4.2 Configuration du fichier pg_hba.conf (2/4).....................................................................156 4.3 Configuration du fichier pg_hba.conf (3/4).....................................................................156 4.4 Configuration du fichier pg_hba.conf (4/4).....................................................................157 4.5 Méthodes d'authentification (1/3)....................................................................................158 4.6 Méthodes d'authentification (2/3)....................................................................................158 4.7 Méthodes d'authentification (3/3)....................................................................................159

5 Maintenance.............................................................................................................................160 5.1 Principes...........................................................................................................................160 5.2 Sauvegarde.......................................................................................................................161 5.3 Espace disque - VACUUM...............................................................................................162 5.4 Espace disque - VACUUM FULL....................................................................................163 5.5 Espace disque - stratégie..................................................................................................163 5.6 Statistiques (1/2)..............................................................................................................164

6 / 275 http://www.bull-formation.com

Page 7: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.7 Statistiques (2/2)..............................................................................................................164 5.8 Gel des XID......................................................................................................................165 5.9 Le démon Autovacuum....................................................................................................166 5.10 Autovacuum : paramètres (1/2)......................................................................................166 5.11 Autovacuum : paramètres (2/2)......................................................................................167 5.12 Indexation.......................................................................................................................168 5.13 CLUSTER ou VACUUM ?............................................................................................169 5.14 Journaux applicatifs.......................................................................................................169

6 Conclusion...............................................................................................................................171 6.1 Pour aller plus loin...........................................................................................................171 6.2 Questions..........................................................................................................................171

Travaux Pratiques.............................................................................................................................172 1 Énoncés....................................................................................................................................173

1.1 Pré-requis.........................................................................................................................173 1.2 Gestion des rôles..............................................................................................................173

1.2.1 Création d'un utilisateur et d'un groupe....................................................................173 1.2.2 Modification des permissions...................................................................................173 1.2.3 Héritage des droits au login......................................................................................174

1.3 pg_hba.conf......................................................................................................................174 1.4 VACUUM.........................................................................................................................174

1.4.1 Nettoyage avec VACUUM.......................................................................................174 1.4.2 Nettoyage avec VACUUM FULL.............................................................................174

1.5 Truncate ou Delete ?.........................................................................................................174 1.6 Statistiques.......................................................................................................................175 1.7 Gel des XID......................................................................................................................175 1.8 Démon Autovacuum.........................................................................................................175 1.9 Réindexation....................................................................................................................175 1.10 Traces.............................................................................................................................175

2 Solutions..................................................................................................................................177 2.1 Pré-requis.........................................................................................................................177 2.2 Gestion des rôles..............................................................................................................177

2.2.1 Création d'un utilisateur et d'un groupe....................................................................177 2.2.2 Modification des permissions...................................................................................178 2.2.3 Héritage des droits au login......................................................................................179

2.3 pg_hba.conf......................................................................................................................179 2.4 VACUUM.........................................................................................................................179

2.4.1 Nettoyage avec VACUUM.......................................................................................179 2.4.2 Nettoyage avec VACUUM FULL.............................................................................181

2.5 Truncate ou Delete ?.........................................................................................................181 2.6 Statistiques.......................................................................................................................181 2.7 Gel des XID......................................................................................................................182 2.8 Démon Autovacuum.........................................................................................................182 2.9 Réindexation....................................................................................................................183 2.10 Traces.............................................................................................................................184

PostgreSQL : Sauvegarde / Restauration..........................................................................................185 1 Introduction..............................................................................................................................186

1.1 Menu................................................................................................................................186 1.2 Licence Creative Commons CC-BY-NC-SA...................................................................186

2 Définir une politique de sauvegarde........................................................................................188

7 / 275 http://www.bull-formation.com

Page 8: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.1 Objectifs...........................................................................................................................189 2.2 Différentes approches.......................................................................................................189

3 Sauvegardes SQL.....................................................................................................................190 3.1 Sauvegarde avec pg_dump (1/2)......................................................................................190 3.2 Sauvegarde avec pg_dump (2/2)......................................................................................191 3.3 Restauration des archives (1/4)........................................................................................191 3.4 Restauration des archives (2/4)........................................................................................192 3.5 Restauration des archives (3/4)........................................................................................192 3.6 Restauration des archives (4/4)........................................................................................192 3.7 Migration de données.......................................................................................................193 3.8 Sauvegarder/restaurer un cluster......................................................................................193

4 Sauvegarde au niveau système de fichiers...............................................................................194 4.1 Limitations.......................................................................................................................194 4.2 Image du système de fichiers (1/3)...................................................................................194 4.3 Image du système de fichiers (2/3)...................................................................................195 4.4 Image du système de fichiers (3/3)...................................................................................195 4.5 Sauvegarde avec rsync.....................................................................................................195

5 Sauvegardes PITR....................................................................................................................196 5.1 Présentation des XLOG....................................................................................................196 5.2 Avantages (1/2).................................................................................................................197 5.3 Avantages (2/2).................................................................................................................197 5.4 Limitations.......................................................................................................................197 5.5 Recommandations............................................................................................................198 5.6 Configurer l'archivage......................................................................................................198 5.7 Sauvegarde PITR (1/2).....................................................................................................199 5.8 Sauvegarde PITR (2/2).....................................................................................................200 5.9 Restauration PITR (1/3)...................................................................................................200 5.10 Restauration PITR (2/3).................................................................................................201 5.11 Restauration PITR (3/3).................................................................................................202 5.12 Outil pglesslog...............................................................................................................202 5.13 Avertissements................................................................................................................203 5.14 Log Shipping..................................................................................................................203 5.15 pg_standby.....................................................................................................................204 5.16 walmgr............................................................................................................................204 5.17 Recommandations générales..........................................................................................205

6 Outils de sauvegarde externes..................................................................................................206 7 Matrice.....................................................................................................................................207 8 Conclusion...............................................................................................................................208

8.1 Questions..........................................................................................................................208Travaux Pratiques.............................................................................................................................209

1 Énoncés....................................................................................................................................210 1.1 Sauvegardes SQL.............................................................................................................210

1.1.1 Sauvegarde SQL d'une base......................................................................................210 1.1.2 Sauvegarde SQL de toutes les bases.........................................................................210 1.1.3 Sauvegarde SQL de tables........................................................................................210

1.2 Restaurations SQL...........................................................................................................210 1.2.1 Restauration d'une base de données.........................................................................210 1.2.2 Restauration d'une table............................................................................................210 1.2.3 Migration de données...............................................................................................210

8 / 275 http://www.bull-formation.com

Page 9: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1.3 Sauvegardes PITR............................................................................................................211 1.3.1 Sauvegarde................................................................................................................211 1.3.2 Restauration..............................................................................................................211

1.4 Mise en place du ''Log Shipping''.....................................................................................211 2 Solutions..................................................................................................................................212

2.1 Sauvegardes SQL.............................................................................................................212 2.1.1 Sauvegarde SQL d'une base......................................................................................212 2.1.2 Sauvegarde SQL de toutes les bases.........................................................................212 2.1.3 Sauvegarde SQL de tables........................................................................................212

2.2 Restaurations SQL...........................................................................................................213 2.2.1 Restauration d'une base de données.........................................................................213 2.2.2 Restauration d'une table............................................................................................213 2.2.3 Migration de données...............................................................................................213

2.3 Sauvegardes PITR............................................................................................................213 2.3.1 Sauvegarde...............................................................................................................213 2.3.2 Restauration..............................................................................................................215

2.4 Mise en place du ''Log Shipping''.....................................................................................216PostgreSQL : Monitoring..................................................................................................................219

1 Introduction..............................................................................................................................220 1.1 Licence Creative Commons CC-BY-NC-SA...................................................................220

2 Plan..........................................................................................................................................222 3 Partie 1 : Politique de suivi......................................................................................................223

3.1 Objectifs du suivi.............................................................................................................223 3.2 Utilisateurs concernés......................................................................................................224 3.3 Indicateurs à surveiller (1/4)............................................................................................225 3.4 Indicateurs à surveiller (2/4)............................................................................................225 3.5 Indicateurs à surveiller (3/4)............................................................................................225 3.6 Indicateurs à surveiller (4/4)............................................................................................226 3.7 Outils internes..................................................................................................................226 3.8 Outils externes..................................................................................................................227 3.9 Pré-requis.........................................................................................................................227

4 Partie 2 : Statistiques................................................................................................................228 4.1 Statistiques : configuration...............................................................................................228 4.2 Statistiques : visualisation (1/7).......................................................................................229 4.3 Statistiques : visualisation (2/7).......................................................................................230 4.4 Statistiques : visualisation (3/7).......................................................................................230 4.5 Statistiques : visualisation (4/7).......................................................................................231 4.6 Statistiques : visualisation (5/7).......................................................................................232 4.7 Statistiques : visualisation (6/7).......................................................................................232 4.8 Statistiques : visualisation (7/7).......................................................................................233 4.9 Statistiques : visualisation................................................................................................233 4.10 Stats : commandes..........................................................................................................233

5 Partie 3 : analyse de logs..........................................................................................................235 5.1 Configuration : où tracer ?...............................................................................................235 5.2 Configuration : quand tracer ?..........................................................................................236 5.3 Configuration : que tracer ?..............................................................................................237 5.4 Configuration : activer syslog..........................................................................................237 5.5 Configuration : activer les traces......................................................................................238 5.6 Configuration : exemple...................................................................................................238

9 / 275 http://www.bull-formation.com

Page 10: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.7 pgFouine : présentation....................................................................................................239 5.8 pgFouine : utilisation........................................................................................................239 5.9 pgFouine : copie d'écran...................................................................................................240 5.10 pgFouine : copie d'écran.................................................................................................241 5.11 Analyse de requêtes : PQA.............................................................................................241 5.12 Analyse de requêtes : EPQA..........................................................................................242 5.13 Analyse de requêtes : pgsi..............................................................................................243 5.14 pg_stat_statements.........................................................................................................243 5.15 Alertes à partir des journaux applicatifs.........................................................................244

6 Partie 4 : visualisation..............................................................................................................246 6.1 Visualisation avec Munin.................................................................................................246 6.2 Avantages de Munin.........................................................................................................246 6.3 Munin : copie d'écran.......................................................................................................247 6.4 Munin : copie d'écran.......................................................................................................248 6.5 Visualisation : autres pistes..............................................................................................248 6.6 Visualisation avec Zabbix................................................................................................249 6.7 Avantages et inconvénients de Zabbix.............................................................................249 6.8 Zabbix : copie d'écran......................................................................................................250 6.9 Zabbix : copie d'écran......................................................................................................251

7 Partie 5 : surveillance...............................................................................................................252 7.1 Surveillance : commandes Unix.......................................................................................252 7.2 Surveillance : commandes Unix.......................................................................................253 7.3 Surveillance : commandes Unix.......................................................................................254 7.4 Surveillance : commandes Unix.......................................................................................255 7.5 Surveillance : commandes Win32....................................................................................255 7.6 Surveillance : pg_locks....................................................................................................256 7.7 Surveillance : disques.......................................................................................................257 7.8 pgsnap : présentation........................................................................................................257 7.9 pgsnap : utilisation...........................................................................................................258 7.10 pgsnap : copie d'écran....................................................................................................258 7.11 pgsnap : copie d'écran.....................................................................................................259 7.12 Nagios............................................................................................................................259 7.13 Nagios : avantages..........................................................................................................259 7.14 Nagios : copie d'écran....................................................................................................260 7.15 Nagios : copie d'écran....................................................................................................261 7.16 Pnp4Nagios....................................................................................................................261 7.17 Surveillance avec Monit.................................................................................................262 7.18 Surveillance avec Monit.................................................................................................263 7.19 Avantages et inconvénients de Monit.............................................................................263 7.20 Monit : copie d'écran......................................................................................................264 7.21 Monit : copie d'écran......................................................................................................265 7.22 Surveillance : d'autres pistes..........................................................................................265

8 Conclusion...............................................................................................................................266 8.1 Questions..........................................................................................................................266

Travaux Pratiques.............................................................................................................................267 1 Énoncés....................................................................................................................................268

1.1 Munin...............................................................................................................................268 1.2 pgFouine...........................................................................................................................268 1.3 PGSnap.............................................................................................................................268

10 / 275 http://www.bull-formation.com

Page 11: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Corrections...............................................................................................................................269 2.1 Munin...............................................................................................................................269

2.1.1 Installer le serveur munin sur votre poste.................................................................269 2.1.1.1 Dépendances.....................................................................................................269 2.1.1.2 Installation........................................................................................................269

2.1.2 Installer le client munin sur votre poste...................................................................269 2.1.2.1 Dépendances.....................................................................................................269 2.1.2.2 Installation........................................................................................................270

2.1.3 Configurer le serveur munin pour que seul l'accès local soit autorisé......................270 2.1.4 Installer les plugins PostgreSQL..............................................................................270 2.1.5 Création du plugin munin.........................................................................................271 2.1.6 Installation du plugin................................................................................................272

2.2 pgFouine...........................................................................................................................273 2.2.1 Installer pgfouine......................................................................................................273 2.2.2 Configurer les traces de PostgreSQL........................................................................273 2.2.3 Configurer syslog.....................................................................................................273 2.2.4 Utiliser pgfouine pour générer des rapports.............................................................274

2.3 PGSnap.............................................................................................................................274 2.3.1 Installer pgsnap.........................................................................................................274 2.3.2 Exécuter pgsnap........................................................................................................275 2.3.3 Divers.......................................................................................................................275

11 / 275 http://www.bull-formation.com

Page 12: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Administration PostgreSQL

Découvrir PostgreSQL

12 / 275 http://www.bull-formation.com

Page 13: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Préambule

• Quelle histoire !

• Un des plus grands projets libres actif

• Souvent cité comme exemple

L'histoire de PostgreSQL est longue, riche et passionnante. Au coté des projets libres Apache et Linux, PostgreSQL est l'un des plus vieux logiciels libres en activité et fait partie des SGBD les plus sophistiqués à l'heure actuelle.

Au sein des différentes communautés libres, PostgreSQL est souvent utilisé comme exemple à différents niveaux :

• Qualité du code

• Indépendance des développeurs et gouvernance du projet

• Réactivité de la communauté

• Stabilité et puissance du logiciel

Tous ces atouts font que PostgreSQL est désormais reconnu et adopté par des milliers de grandes sociétés de par le monde.

1.1 Au menu1. Origines et historique du projet 2. Versions et feuille de route 3. Concepts de base 4. Fonctionnalités 5. Références françaises et internationales

Cette première partie est un tour d'horizon pour découvrir les multiples facettes du système de base de données libre PostgreSQL.

Les deux premières parties expliquent la genèse du projet et détaille les différences entres les versions successives du logiciel. Puis nous ferons un rappel théorique sur les principes fondateurs de PostgreSQL (ACID, MVCC, Transactions, Journaux de transactions) ainsi que sur les fonctionnalités essentielles (schémas, index, tablespaces, triggers).

13 / 275 http://www.bull-formation.com

Page 14: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Nous terminerons par un panorama d'utilisateurs renommés et de cas d'utilisations remarquables.

1.2 Objectifs• Comprendre les origines du projet

• Revoir les principes fondamentaux

• Découvrir des exemples concrets

PostgreSQL est un des plus vieux logiciels Open-Source ! Comprendre son histoire permet de mieux réaliser le chemin parcouru et les raisons de son succès. Par ailleurs, un rappel des concepts de base permet d'avancer plus facilement lors des modules suivants. Enfin, une série de cas d'utilisation et de références sont toujours utiles pour faire le choix de PostgreSQL en ayant des repères concrets.

1.3 Licence Creative Commons CC-BY-NC-SAVous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Cette formation (diapositives, manuels et travaux pratiques) est sous licence CC-BY-NC-SA.

Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'œuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'œuvre).

Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.

Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de

14 / 275 http://www.bull-formation.com

Page 15: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

distribuer la création qui en résulte que sous un contrat identique à celui-ci.

À chaque réutilisation ou distribution de cette création, vous devez faire apparaître clairement au public les conditions contractuelles de sa mise à disposition. La meilleure manière de les indiquer est un lien vers cette page web.

Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits sur cette œuvre.

Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.

Le texte complet de la licence est disponible à cette adresse: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode

15 / 275 http://www.bull-formation.com

Page 16: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Un peu d'histoire...

• L'origine du nom

• Les origines du projet

• La philosophie

2.1 PostgreSQL ?!?!• Michael Stonebraker recode Ingres

• post “ingres” -> postingres -> postgres

• postgres -> PostgreSQL

L'origine du nom PostgreSQL remonte à la base de données Ingres, développée à l'université de Berkeley par Michael Stonebraker. En 1985, il prend la décision de reprendre le développement à partir de zéro et nomme ce nouveau logiciel Postgres, comme raccourci de post-Ingres.

En 1995, avec l'ajout du support du langage SQL, postgres fut renommé Postgres95 puis PostgreSQL.

Aujourd'hui, le nom officiel est “PostgreSQL” (prononcez “post - gresse - Q - L”). Cependant, le nom “Postgres” est accepté comme alias.

Pour aller plus loin : » http://archives.postgresql.org/pgsql-advocacy/2007-11/msg00109.php » http://wiki.postgresql.org/wiki/Postgres

16 / 275 http://www.bull-formation.com

Page 17: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.2 Principes fondateurs• Sécurité des données (ACID)

• Respect des normes (ANSI SQL)

• Fonctionnalités

• Performances

• Simplicité du code

Depuis son origine, PostgreSQL a toujours privilégié la stabilité et le respect des standards plutôt que les performances.

Ceci explique en partie la réputation de relative lenteur et de complexité face aux autres SGBD du marché. Cette image est désormais totalement obsolète, notamment grâce aux avancées réalisées depuis les versions 8.x.

2.3 Origines• Années 1970 : Ingres est développé à Berkeley

• 1985 : Postgres succède à Ingres

• 1995 : Ajout du langage SQL.

• 1996 : Postgres devient PostgreSQL

• 1996 : Création du PostgreSQL Global Development Group

L'histoire de PostgreSQL remonte à la base de données Ingres, développée à Berkeley par Michael Stonebraker. Lorsque ce dernier décida en 1985 de recommencer le développement de zéro, il nomma le logiciel Postgres, comme raccourci de post-Ingres. Lors de l'ajout des fonctionnalités SQL en 1995 par deux étudiants chinois de Berkeley, Postgres fut renommé Postgres95. Ce nom fut changé à la fin de 1996 en PostgreSQL lors de la libération du code source de PostgreSQL.

De longs débats enflammés animent toujours la communauté pour savoir s'il faut revenir au nom initial Postgres.

À l'heure actuelle, le nom Postgres est accepté comme un alias du nom officiel PostgreSQL.

17 / 275 http://www.bull-formation.com

Page 18: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Plus d'informations : » http://www.postgresql.org/about/history

2.4 Origines (années 2000)Apparitions de la communauté internationale

• ~ 2000: Communauté japonaise

• 2004 : Communauté francophone

• 2006 : SPI

• 2007 : Communauté italienne

• 2008 : PostgreSQL Europe et US

• 2009 : Boom des PGDay

Les années 2000 voient l’apparition de communautés locales organisées autour d'association ou de manière informelle. Chaque communauté organise la promotion, la diffusion d'information et l'entraide à son propre niveau.

En 2000 apparaît la communauté japonaise. Elle dispose d'un grand groupe, capable de réaliser des conférences chaque année. Elle compte au dernier recensement connu, plus de 3000 membres.

En 2004 nait l'association française (loi 1901) appelée PostgreSQLfr. Cette association a pour but de fournir un cadre légal pour pouvoir participer à certains événements comme Solutions Linux, les RMLL ou le pgDay 2008 à Toulouse. Elle permet aussi de récolter des fonds pour aider à la promotion de PostgreSQL.

En 2006, le PGDG intègre le « Software in the Public Interest », Inc. (SPI), une organisation à but non lucratif chargée de collecter et redistribuer des financements. Ce n'est pas une organisation spécifique à PostgreSQL. Elle a été créée à l'initiative de Debian et dispose aussi de membres comme OpenOffice.org.

En 2008, douze ans après la création du projet, des associations d'utilisateurs apparaissent pour soutenir, promouvoir et développer PostgreSQL à l'échelle internationale. PostgreSQL UK organise une journée de conférences à Londres, PostgreSQL Fr en organise une à Toulouse. Des « sur-groupes » apparaissent aussi pour aider les groupes. PGUS apparaît pour consolider les différents groupes américains d'utilisateurs PostgreSQL. Ces derniers étaient plutôt créés géographiquement, par état ou grosse ville. Ils peuvent rejoindre et être aidés par cette organisation. De même en Europe arrive PostgreSQL.eu une association chargée d'aider les utilisateurs de PostgreSQL souhaitant mettre en place des événements. Son gros du travail est l'organisation d'un événement majeur en Europe tous les ans : le PGDay.eu. Il a eu lieu

18 / 275 http://www.bull-formation.com

Page 19: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

la première fois en France, à Paris, en 2009, puis en Allemagne à Stuttgart, en 2010. La destination pour 2011 n'est pas encore connue. Des rumeurs parlent de nouveau d'Amsterdam.

En 2010, on dénombre plus d'une conférence par mois consacrée uniquement à PostgreSQL dans le monde.

Communauté japonaise: http://www.postgresql.jp Communauté francophone: http://www.postgresql.fr Communauté italienne: http://www.itpug.org Communauté européenne : http://www.postgresql.eu Communauté US : http://www.postgresql.us

2.5 Progression du projet - échanges de mail

trafic des listes de diffusion

Ce graphe représente l'évolution du trafic des listes de diffusion du projet qui est corolaire du nombre d'utilisateurs du logiciel.

On remarque une augmentation très importante jusqu'en 2005 puis une petite chute en 2008, un peu récupérée en 2009.

La moyenne actuelle est d'environ 6000 messages par mois. Ce qui donne environ 200 messages par jour sur les 23 listes actives.

Source du graphe : » http://postgresql.markmail.org/

On peut voir l'importance de ces chiffres en comparant le trafic des listes PostgreSQL et MySQL (datant de février 2008):

http://markmail.blogspot.com/2008/02/postgresql-more-traffic-than-mysql-and.html

19 / 275 http://www.bull-formation.com

Page 20: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Actuellement, il y a environ 25 messages par jour sur les listes MySQL et 10 pour Firebird.

Pour aller plus loin : On peut également visualiser l'évolution des contributions de la communauté PostgreSQL grâce au projet Code Swarm : http://www.vimeo.com/1081680

2.6 Progression du code

Évolution du nombre de lignes de code dans les sources de PostgreSQL

Ce graphe représente l'évolution du nombre de lignes de code dans les sources de PostgreSQL. Cela permet de bien visualiser l'évolution du projet en terme de développement.

Là encore, on note une augmentation constante depuis 2000 avec une croissance régulière d'environ 25000 lignes de code C par an. Le plus intéressant est certainement de noter que l'évolution est constante.

Actuellement, PostgreSQL est composé de 870.000 lignes de code (dont 230.000 lignes de commentaires), pour environ 200 développeurs actifs.

Source: https://www.ohloh.net/p/postgres/analyses/latest

20 / 275 http://www.bull-formation.com

Page 21: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3 Les versions

• Versions obsolètes : 7.4 à 8.1

• De 8.2 à 9.1

• 9.2 ?

• Versions dérivées

3.1 Historique1996 : v1.0 première version publiée → 2003 : v7.4 première version → réellement stable 2005 : v8.0 arrivée sur Windows → 2008 : v8.3 performance et fonctionnalités → 2010 : v9.0 réplication intégrée →

La version 8 marque l'entrée tant attendue de PostgreSQL dans le marché des SGDB de haut niveau, en apportant des fonctionnalités telles que les tablespaces, les procédures stockées en Java, le Point In Time Recovery, la réplication asynchrone ainsi qu'une version native pour Windows.

La version 9 semble pencher vers la haute-disponibilité. La 9.0 intègre un système de réplication asynchrone asymétrique. La version 9.1 ajoute une réplication synchrone et améliore de nombreux points sur la réplication (notamment pour la partie administration et supervision). La prochaine version devrait supporter la réplication en cascade.

3.2 Numérotation• X.Y : version majeure

• X.Y.Z : version mineure

Une version majeure apporte de nouvelles fonctionnalités, des changements de

21 / 275 http://www.bull-formation.com

Page 22: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

comportement, etc. Une version majeure sort généralement tous les 12/15 mois.

Une version mineure ne comporte que des corrections de bugs ou de failles de sécurité. Elles sont plus fréquentes que les versions majeures, avec un rythme de sortie de l'ordre des trois mois, sauf bugs majeurs ou failles de sécurité. Chaque bug est corrigé dans toutes les versions stables actuellement maintenues par le projet.

3.3 Versions courantesDernières releases (26 septembre 2011) :

• version 8.2.22

• version 8.3.16

• version 8.4.9

• version 9.0.5

• version 9.1.1

La philosophie générale des développeurs de PostgreSQL peut se résumer ainsi :

« Notre politique se base sur la qualité, pas sur les dates de sortie. »

Toutefois, même si cette philosophie reste très présente parmi les développeurs, depuis quelques années, les choses évoluent et la tendance actuelle est de livrer une version stable majeure tous les 12 à 15 mois.

Le support de la version 7.3 a été arrêté au début de l'année 2008. La même chose est arrivée aux versions 7.4 et 8.0 milieu 2010. Et enfin, la 8.1 a subi le même sort en décembre 2010. La prochaine version qui subira ce sort est la 8.2, fin 2011 ou début 2012.

La tendance actuelle est de garantir un support pour chaque version courante pendant une durée minimale de 5 ans.

Pour plus de détails : http://wiki.postgresql.org/wiki/PostgreSQL_Release_Support_Policy

22 / 275 http://www.bull-formation.com

Page 23: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.4 Version 8.2• Fin 2006 - décembre 2011 (?)

• Compatibilité SQL2003

• Meilleur support de Windows et des migrations depuis Oracle

• Support de LDAP pour l'authentification

• LogShipping

• Amélioration des requêtes préparées

• Amélioration des performances

Cette version dispose de peu de modifications majeures. Elle correspond plutôt à une stabilisation du projet. C'est d'ailleurs la première version déclarée stable pour la plateforme Windows. Elle simplifie aussi les migrations des logiciels compatibles avec Oracle.

Un gros travail a été fourni pour fournir un meilleur respect de la norme SQL:2003. Des informations sur cette norme ont été ajoutées dans le manuel de PostgreSQL.

La connexion d'un utilisateur est sujet à une authentification préalable. Cette authentification peut maintenant se faire via un serveur LDAP. La vérification du mot de passe et de la validité du compte se font au niveau du serveur LDAP et non plus au niveau du serveur PostgreSQL.

Le LogShipping permet d'archiver facilement les journaux de transactions grâce à des nouveaux paramètres de configuration.

Pour plus de détails : http://www.postgresql.org/docs/current/interactive/release-8-2.html

Cette version ne sera plus maintenue à partir de décembre 2011.

23 / 275 http://www.bull-formation.com

Page 24: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.5 Version 8.3• Début 2008 - février 2013 (?)

• Nombreuses améliorations sur les performances: HOT, commit asynchrone, etc.

• Recherche plein texte

• XML

• Journalisation CSV

• Nouveaux types : enum, UUID

• Nouvelle authentification GSSAPI/SSPI

Cette version est la première à bénéficier de la nouvelle organisation du développement avec les commit fests. Ces périodes sont utilisées pour vérifier les patchs fournis par les développeurs avant leur intégration dans le code source de PostgreSQL (ou leur rejet le cas échéant). Elles permettent de fluidifier les échanges entre développeurs et notamment entre développeurs et commiters (les personnes autorisées à modifier le code source sur le dépôt des sources).

Elle comporte de nombreuses nouvelles évolutions, notamment des modules contrib tsearch2, xml2, uuid, qui atteignent enfin le cœur du projet.

Attention ! Cette version a la réputation d'être extrêmement rigoureuse !

Lors d'une migration, vous pourrez rencontrer des problèmes avec :

1. l'encodage de votre base

2. les conversions implicites

En effet, la version 8.3.x ne contient plus une série de conversions de types qui étaient réalisées implicitement dans les versions précédentes. Ceci doit vous amener à faire une revue et une correction de votre code avant la migration.

Pour plus de détails : http://www.postgresql.org/docs/current/interactive/release-8-3.html http://www.dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf

Cette version ne sera plus maintenue à partir de février 2013.

24 / 275 http://www.bull-formation.com

Page 25: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.6 Version 8.4• Juillet 2009 - juillet 2014 (?)

• Fonctions Window (clauses WITH, OVER) et SQL/MED;

• CTE et requêtes récursives;

• Paramètres par défaut et paramètres variadic pour les fonctions;

• Restauration parallélisée d'une sauvegarde;

• Droits sur les colonnes;

De plus, cette version apporte des améliorations moins visibles telles que :

• Locale configurable par base de données;

• Refonte du FSM;

• VACUUM sélectif grâce au « visibility map »;

• Support des certificats SSL;

• Statistiques sur les fonctions;

• Fonction pg_terminate_backend();

• Nouveaux modules contrib : pg_stat_statements, auto_explain, …

Exemple de la volonté d'intégrer des fonctionnalités totalement matures, le Hot Standby, fonctionnalité très attendue par les utilisateurs, a finalement été repoussé pour la version suivante car les développeurs estimaient qu'il n'était pas assez fiable.

Pour plus de détails : http://www.postgresql.org/docs/current/interactive/release-8-4.html http://www.dalibo.org/hs44_postgresql_8.4

Cette version ne sera plus maintenue à partir de juillet 2014.

25 / 275 http://www.bull-formation.com

Page 26: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.7 Version 9.0• Septembre 2010 - septembre 2015 (?)

• Hot Standby + Streaming Replication

• Contraintes d'exclusion

• Améliorations pour l'EXPLAIN

• Contrainte UNIQUE differable;

• Droits par défaut, GRANT ALL;

• Triggers: sur colonne, et clause WHEN.

Mais aussi :

• Droit d'accès aux « Large Objects »;

• Configurations par utilisateurs, par bases de données mais aussi par couple utilisateur/base;

• Bloc de code anonyme.

Pour plus de détails : http://www.dalibo.org/annonce_9.0 http://www.dalibo.org/quoi_de_neuf_dans_postgresql_9

Logiquement, on peut s'attendre à ce que l'arrêt du support de cette version survienne en septembre 2015, même si aucune décision officielle n'a été prise pour l'instant.

3.8 Version 9.1• Septembre 2011 - septembre 2016 (?)

• réplication synchrone

• supervision et administration plus aisée de la réplication

• gestion des extensions

• support des tables distantes via SQL/Med

• support des labels de sécurité

• support des tables non tracées

26 / 275 http://www.bull-formation.com

Page 27: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Et beaucoup d'autres :

• moins de verrous pour les DDL (ALTER TABLE, TRIGGER)

• réduction de la taille des champs de type NUMERIC sur disque

• compteurs du nombre de VACUUM et ANALYZE pour les tables pg_stat_*_tables

• le support des triggers sur les vues

Pour plus de détails : http://www.postgresql.org/docs/9.1/static/release-9-1.html http://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.1/fr

3.9 Version 9.2• En cours de développement, sortie prévue mi 2012

• réplication en cascade

• axé performances

• réduction des verrous de table

• parcours d'index seuls

• diminution des accès disque

Le développement a commencé en mai 2011. Un commit-fest a déjà eu lieu et un deuxième commence mi septembre :

• https://commitfest.postgresql.org/action/commitfest_view?id=10

• https://commitfest.postgresql.org/action/commitfest_view?id=11

3.10 Quelle version utiliser ?• 8.1 et inférieures : Attention Danger !

• 8.2 : Planifier une migration très rapidement

• 8.3, 8.4 et 9.0 : Mise à jour uniquement

• 9.1 : Nouvelles installations et nouveaux développements

Si vous avez une version 8.1 ou inférieure, planifiez le plus rapidement possible une migration vers la 9.1.

27 / 275 http://www.bull-formation.com

Page 28: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Il ne reste que quelques mois de correctifs pour la 8.2. Si vous utilisez cette version, commencez à travailler sur une migration de version dès que possible.

Pour les versions 8.3, 8.4 et 9.0, le plus important est d'appliquer les mises à jour correctives.

Actuellement, la version 9.1 doit être utilisée pour les nouvelles installations en production et les nouveaux développements.

Tableau comparatif des versions : http://www.postgresql.org/about/featurematrix

3.11 Versions dérivées• Postgres Plus (compatibilité Oracle)

• Red Hat Database

• greenplum / Netezza (data warehouse)

Il existe de nombreuses versions dérivées de PostgreSQL. Elles sont en général destinées à des cas d'utilisation très spécifiques. Leur code est souvent fermé et nécessite l'acquisition d'une licence payante.

Liste exhaustive des « forks » : http://wiki.postgresql.org/wiki/PostgreSQL_derived_databases

Sauf cas très précis, il est recommandé d'utiliser la version officielle, libre et gratuite.

28 / 275 http://www.bull-formation.com

Page 29: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4 Concepts de base

• ACID

• MVCC

• Transactions

• Journaux de transactions

4.1 ACID• Atomicité (Atomic)

• Cohérence (Consistent)

• Isolation (Isolated)

• Durabilité (Durable)

Les propriétés ACID sont le fondement même de toute base de donnée. Il s'agit de quatre règles fondamentales que toute transaction doit respecter :

• A : Une transaction est entière : « tout ou rien ».

• C : Une transaction amène la base d'un état stable à un autre.

• I : Les transactions n'agissent pas les unes sur les autres.

• D : Une transaction validée provoque des changements permanents.

Les propriétés ACID sont quatre propriétés essentielles d'un sous-système de traitement de transactions d'un système de gestion de base de données. On considère parfois que seuls les SGBD qui respectent ces propriétés sont dignes d'être considérées comme des bases de données.

29 / 275 http://www.bull-formation.com

Page 30: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.2 MultiVersion Concurrency Control (MVCC)• Le “noyau” de PostgreSQL

• Garantit ACID

• Permet les écritures concurrentes sur la même table

MVCC (Multi Version Concurrency Control) est le mécanisme interne de PostgreSQL utilisé pour garantir la cohérence des données lorsque plusieurs processus accèdent simultanément à la même table.

C'est notamment MVCC qui permet de sauvegarder facilement une base à chaud et d'obtenir une sauvegarde cohérente alors même que plusieurs utilisateurs sont potentiellement en train de modifier des données dans la base.

C'est la qualité de l'implémentation de ce système qui fait de PostgreSQL un des meilleurs SGBD au monde : chaque transaction travaille dans son image de la base, cohérent du début à la fin de ses opérations. Par ailleurs les écrivains ne bloquent pas les lecteurs et les lecteurs ne bloquent pas les écrivains, contrairement aux SGBD s'appuyant sur des verrous de lignes. Cela assure de meilleures performances, un fonctionnement plus fluide des outils s'appuyant sur PostgreSQL.

4.3 MVCC et les verrous• Une lecture ne bloque pas une écriture

• Une écriture ne bloque pas une lecture

• Une écriture ne bloque les autres écritures…

• … sauf pour la mise à jour de la même version d'une ligne.

MVCC maintient toutes les versions nécessaires de chaque tuple, ainsi chaque transaction voit une image figée de la base (appelée snapshot). Cette image correspond à l'état de la base lors du démarrage de la transaction (BEGIN).

MVCC fluidifie les mises à jour en évitant les blocages trop contraignants (verrous sur UPDATE) entre sessions et par conséquent de meilleures performances en contexte transactionnel.

Voici un exemple concret :

$ SELECT now(); now ------------------------------- 2010-11-25 16:53:42.896983+01

30 / 275 http://www.bull-formation.com

Page 31: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

(1 ligne) $ BEGIN;BEGIN$ SELECT now(); now ------------------------------- 2010-11-25 16:53:52.447003+01(1 ligne) $ SELECT now(); now ------------------------------- 2010-11-25 16:53:52.447003+01(1 ligne)

4.4 TransactionsIntimement liées à ACID et MVCC :

• Une transaction est un ensemble d'opérations atomiques

• Le résultat d'une transaction est « tout ou rien »

• SAVEPOINT disponible pour sauvegarde des modifications d'une transaction à un instant t

Voici un exemple de transaction:

$ BEGIN;BEGIN$ CREATE TABLE capitaines (id serial,nom text, age integer);NOTICE: CREATE TABLE créera des séquences implicites « capitaines_id_seq » pour la colonne serial « capitaines.id »CREATE TABLE$ INSERT INTO capitaines VALUES(1,'Haddock',35);INSERT 0 1$ SELECT age FROM capitaines; age ----- 35(1 ligne) $ ROLLBACK;ROLLBACK$ SELECT age FROM capitaines;ERREUR: la relation « capitaines » n'existe pasLIGNE 1 : select age from capitaines;

On voit que la table capitaine a existé à l'intérieur de la transaction. Mais puisque cette transaction a été annulée (ROLLBACK), la table n'a pas été créée au final. Cela montre aussi le support du DDL transactionnel au sein de PostgreSQL.

Un point de sauvegarde est une marque spéciale à l'intérieur d'une transaction qui autorise l'annulation de toutes les commandes exécutées après son établissement, restaurant la transaction dans l'état où elle était au moment de l'établissement du point

31 / 275 http://www.bull-formation.com

Page 32: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

de sauvegarde.

$ BEGIN;BEGIN$ CREATE TABLE capitaines (id serial,nom text, age integer);NOTICE: CREATE TABLE créera des séquences implicites « capitaines_id_seq » pour la colonne serial « capitaines.id »CREATE TABLE$ INSERT INTO capitaines VALUES(1,'Haddock',35);INSERT 0 1$ SAVEPOINT insert_sp;SAVEPOINT$ UPDATE capitaines SET age=45 WHERE nom='Haddock';UPDATE 1$ ROLLBACK TO SAVEPOINT insert_sp;ROLLBACK$ COMMIT;COMMIT$ SELECT age FROM capitaines WHERE nom='Haddock'; age ----- 35(1 ligne)

4.5 Write Ahead Logs, aka WAL• Chaque donnée est écrite 2 fois sur le disque !

• Sécurité quasiment infaillible

• Comparable à la journalisation des systèmes de fichiers

Les journaux de transactions (appelés parfois WAL ou XLOG) sont une garantie contre les pertes de données.

Il s'agit d'une technique standard de journalisation appliquée à toutes les transactions.

Ainsi lors d'une modification de donnée, l'écriture au niveau du disque se fait en deux temps :

1. Écriture immédiate dans le journal de transaction

2. Écriture à l'emplacement final lors du prochain CHECKPOINT

Ainsi en cas de crash :

1. PostgreSQL redémarre

2. PostgreSQL vérifie s'il reste des données non intégrées aux fichiers de données dans les journaux (mode recovery)

3. Si c'est le cas, ces données sont recopiées dans les fichiers de données afin de retrouver un état stable et cohérent.

32 / 275 http://www.bull-formation.com

Page 33: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Plus d'information : http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions

4.6 Avantages des WAL• Moins d'écritures sur disque

• Un seul sync sur le fichier de transactions

• Le fichier de transactions est écrit de manière séquentielle

• Point In Time Recovery

• Réplication (WAL Shipping)

33 / 275 http://www.bull-formation.com

Page 34: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5 Fonctionnalités

• Développement

• Sécurité

• Le “catalogue” d'objets SQL

Depuis toujours, PostgreSQL se distingue par sa licence libre (BSD) et sa robustesse prouvée sur de nombreuses années. Mais sa grande force réside également dans le grand nombre de fonctionnalités intégrées dans le moteur du SGBD :

• L'extensibilité, avec des API très bien documentées

• Une configuration fine et solide de la sécurité des accès

• Un support excellent du standard SQL

5.1 Fonctionnalités : développement• PostgreSQL est une plate-forme de développement !

• 15 langages de procédures stockées

• Interfaces natives pour ODBC, JDBC, C, PHP, Perl, etc.

• API ouverte et documentée

Voici la liste complète des langages procéduraux supportés:

pl/pgsql pl/sql pl/python pl/perl pl/tcl pl/sh pl/R pl/java pl/js pl/lolcode pl/scheme pl/php pl/ruby pl/j pl/lua pl/pgpsm

PostgreSQL peut donc être utilisé comme un serveur d'applications ! Vous pouvez ainsi placer votre code au plus prêt des données.

Chaque langage a ses avantages et inconvénients. Par exemple, PL/pgsql est très simple à apprendre mais n'est pas performant quand il s'agit de traiter des chaînes de caractères. Pour ce traitement, il serait préférable d'utiliser PL/perl, voire PL/python. Évidemment, une procédure en C aura les meilleures performances mais sera beaucoup moins facile à coder et à maintenir.

Les applications externes peuvent accéder aux données du serveur PostgreSQL grâce à

34 / 275 http://www.bull-formation.com

Page 35: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

des connecteurs. Ils peuvent passer par l'interface native, la libpq. C'est le cas du connecteur PHP et du connecteur Perl par exemple. Ils peuvent aussi ré implémenter cette interface, ce que fait le pilote ODBC psqlodbc.

Tableaux des langages supportés : http://wiki.postgresql.org/wiki/PL_Matrix

5.2 Fonctionnalités : extensibilitéCréation de types de données et

• de leurs fonctions

• de leurs opérateurs

• de leurs règles

• de leurs aggrégats

Il est possible de définir de nouveaux types de données, soit en SQL soit en C. Les possibilités et les performances ne sont évidemment pas les mêmes.

Voici comment créer un type en SQL :

CREATE TYPE serveur AS (nom text,adresse_ip text,administrateur text);

Ce type va pouvoir être utilisé dans tous les objets SQL habituels : table, procédure stockée, opérateur (pour redéfinir l'opérateur ”+” par exemple), procédure d'agrégat, contrainte, etc.

Voici un exemple de création d'un opérateur :

CREATE OPERATOR + ( leftarg = stock, rightarg = stock, procedure = stock_fusion, commutator = + );

Conférence de Heikki Linakangas sur la création d'un type color : http://wiki.postgresql.org/images/1/11/FOSDEM2011-Writing_a_User_defined_type.pdf

35 / 275 http://www.bull-formation.com

Page 36: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.3 Sécurité• Fichier pg_hba.conf

• Filtrage IP

• Authentification interne (MD5)

• Authentification externe (identd, LDAP, Kerberos, …)

• Support natif de SSL

Le chiffrage crypt existait pour les versions antérieures à la 8.4 mais, vu sa faiblesse, a été supprimé.

Le support des annuaires LDAP est disponible à partir de la version 8.2.

Le support de GSSAPI/SSPI est disponible à partir de la version 8.3. L'interface de programmation GSS API est un standard de l'IETF qui permet de sécuriser les services informatiques. La principale implémentation de GSSAPI est Kerberos. SSPI permet le Single Sign On sous MS Windows, de façon transparente, qu'on soit dans un domaine AD ou NTLM.

La gestion des certificats SSL est disponible à partir de la version 8.4.

Le support de Radius est disponible à partir de la version 9.0.

5.4 Respect du Standard SQL• Excellent support du SQL ANSI

• Objets SQL: tables, vues, règles, séquences, triggers

• Opérations: jointures, sous-requêtes, requêtes CTE, requêtes Window, etc.

• Unicode et plus de 50 encodages

La dernière version du standard SQL est le SQL:2008.

À ce jour, aucun SGBD ne supporte complètement SQL:2008 mais :

• PostgreSQL progresse et s'en approche au maximum, au fil des versions

• La majorité de SQL:2008 est supportée, parfois avec des syntaxes différentes

• PostgreSQL est le SGDB le plus respectueux du standard

36 / 275 http://www.bull-formation.com

Page 37: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.5 Vues• Masquer la complexité

• Interface cohérente vers les données, même si les tables évoluent

• Sécurité : contrôler l'accès aux données de manière sélective

• Pas de vues matérialisées (pour l'instant !)

À savoir que les vues sont exécutées en tant que l'utilisateur qui les a créé.

Exemple:

$ CREATE TABLE personne ($ nom TEXT, prenom TEXT, num_cartecredit TEXT);$ INSERT INTO personne VALUES ('Duff','John','1234567890123456'); $ CREATE VIEW personne_anon AS $ SELECT nom, prenom, $ substring(num_cartecredit,0,10)||'******' AS num_cc_anon $ FROM personne; $ SELECT * FROM personne_anon;nom | prenom | num_cc_anon------+--------+-----------------Duff | John | 1234567890******

À partir de la 8.4, il est possible de modifier une vue en lui ajoutant des colonnes à la fin, au lieu de devoir les détruire et recréer (ainsi que toutes les vues qui en dépendent, ce qui pouvait être fastidieux).

Exemple:

$ CREATE OR REPLACE VIEW personne_anon AS $ SELECT nom, prenom, $ substring(num_cartecredit,0,10)||'******' AS num_cc_anon,$ md5(substring(num_cartecredit,0,10)) AS num_md5_cc$ FROM personne; $ SELECT * FROM personne_anon;nom | prenom | num_cc_anon | num_md5_cc------+--------+-----------------+----------------------------------Duff | John | 123456789****** | 25f9e794323b453885f5181f1b624d0b

Des travaux sont en cours pour intégrer les vues matérialisées. Pour l'instant, c'est possible en écrivant des fonctions PL/pgsql

Plus de détails : http://jonathangardner.net/PostgreSQL/materialized_views/matviews.html

37 / 275 http://www.bull-formation.com

Page 38: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.6 Schémas• Schéma = espace de noms

• Concept différent des schémas d'Oracle

• Sous-ensemble de la base

Les schémas sont des espaces de noms dans une base de données permettant :

• de grouper les objets d'une base de données

• de séparer les utilisateurs entre eux

• de contrôler plus efficacement les accès aux données

• d'éviter les conflits de noms dans les grosses bases de données

Les schémas sont très utiles pour les systèmes de réplication (Slony, bucardo).

Exemple de schéma :

CREATE SCHEMA paris;SET search_path TO paris;CREATE TABLE monuments (...); CREATE SCHEMA limoges;SET search_path TO limoges;CREATE TABLE monuments (...); -- Quels monuments portant -- un nom identique peut-on trouver-- à Paris et Limoges ?SELECT paris.monuments.nomFROM paris.monumentsWHERE paris.monuments.nom = limoges.monuments.nom

5.7 Contraintes• CHECK : prix > 0

• NOT NULL : id_client NOT NULL

• Unicité : id_client UNIQUE

• Clés primaires : UNIQUE NOT NULL = ⇒ PRIMARY KEY (id_client)

• Clés étrangères : produit_id REFERENCES produits(id_produit)

• EXCLUDE : EXCLUDE USING gist (room WITH =, during WITH &&)

38 / 275 http://www.bull-formation.com

Page 39: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Les contraintes sont la garantie de conserver des données de qualité ! Elles permettent une vérification qualitative des données, au delà du type de données.

Elles donnent des informations au planificateur qui lui permette d'optimiser les requêtes. Par exemple, le planificateur de la version 9.0 sait ne pas prendre en compte une jointure dans certains cas, notamment grâce à l'existence d'une contrainte unique.

Les contraintes d'exclusion ont été ajoutées en 9.0. Elles permettent un test sur plusieurs colonnes avec différents opérateurs (et non pas que l'égalité dans le cas d'une contrainte unique, qui est après tout une contrainte d'exclusion très spécialisée). Si le test se révèle positif, la ligne est refusée.

5.8 Domaines• Types créés par les utilisateurs

• Permettent de créer un nouveau type à partir d'un type de base

• Il pourra vérifier des contraintes supplémentaires.

Exemple:

$ CREATE DOMAIN code_postal_francais AS text CHECK (value ~ '^\d{5}$');CREATE DOMAIN$ CREATE TABLE adresse (numero int, rue text, cp code_postal_francais);CREATE TABLE$ INSERT INTO adresse VALUES (1, 'rue du bac', '75007');INSERT 0 1$ INSERT INTO adresse VALUES (1, 'rue du bec', '74x37');ERROR: value FOR domain code_postal_francais violatesCHECK constraint "code_postal_francais_check"

Les domaines permettent d'intégrer la déclaration des contraintes à la déclaration d'un type, et donc de simplifier la maintenance de l'application si ce type peut être utilisé dans plusieurs tables : si la définition du code postal est insuffisante pour une évolution de l'application, on peut la modifier par un ALTER DOMAIN, et définir de nouvelles contraintes sur le domaine. Ces contraintes seront vérifiées sur l'ensemble des champs ayant le domaine comme type avant que la nouvelle version du type ne soit considérée comme valide.

Le défaut par rapport à des contraintes CHECK classiques sur une table est que l'information ne se trouvant pas dans la table, les contraintes sont plus difficiles à lister sur une table.

39 / 275 http://www.bull-formation.com

Page 40: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.9 Enums• Types créés par les utilisateurs

• Permettent de définir une liste ordonnée de valeurs de type chaîne de caractère pour ce type.

Exemple:

$ CREATE TYPE jour_semaine $ AS ENUM ('Lundi','Mardi','Mercredi','Jeudi','Vendredi',$ 'Samedi','Dimanche');CREATE TYPE$ CREATE TABLE planning (id_user int, jour jour_semaine, activite varchar);CREATE TABLE$ INSERT INTO planning VALUES ('Lundi','Ravioli');INSERT 0 1$ INSERT INTO planning VALUES ('Mardi','Spaghetti');INSERT 0 1$ INSERT INTO planning VALUES ('Mercredi','Tortellini');INSERT 0 1$ INSERT INTO planning VALUES ('Jeudi','Penne');INSERT 0 1$ SELECT * FROM planning WHERE jour >= 'Mardi';jour | activite ----------+------------Mardi | SpaghettiMercredi | TortelliniJeudi | Penne(3 rows)

Les enums permettent de déclarer une liste de valeurs statiques dans le dictionnaire de données plutôt que dans une table externe sur laquelle il faudrait rajouter des jointures : dans l'exemple, on aurait pu créer une table jour_de_la_semaine, et stocker la clé associée dans planning. On aurait pu tout aussi bien positionner une contrainte CHECK, mais on n'aurait plus eu une liste ordonnée.

Le problème des enum est qu'il s'agit d'une déclaration de type : on ne peut plus le modifier une fois déclaré. Il faut le détruire et le recréer. Mais on ne peut le détruire que si plus aucune table ne l'utilise. Il est donc à réserver à des types totalement statiques.

40 / 275 http://www.bull-formation.com

Page 41: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.10 Triggers• Opérations: INSERT, COPY, UPDATE, DELETE

• Trigger TRUNCATE (8.4 et +)

• Trigger pour une colonne ( 9.0 et +)

• Trigger avec condition (9.0 et +)

• Soit pour l'ensemble de la requête (FOR STATEMENT)

• Soit pour chaque ligne impactée (FOR EACH ROW)

Les triggers peuvent être exécutés avant (BEFORE) ou après (AFTER) une opération. Il est possible de les déclencher pour chaque ligne impactée (FOR EACH ROW) ou une seule fois pour l'ensemble de la requête (FOR STATEMENT)

Par ailleurs, les triggers peuvent être écrits dans n'importe lequel des langages de procédure supportés par PostgreSQL (C, PL/PgSQL, PL/Perl, etc. )

Exemple :

CREATE LANGUAGE plpgsql;CREATE TABLE personne ( nom text, salaire integer); CREATE FUNCTION verif_salaire() RETURNS TRIGGER AS $verif_salaire$BEGIN-- On verifie que les variables ne sont pas videsIF NEW.nom IS NULL THEN RAISE EXCEPTION 'le nom ne doit pas être null';END IF;IF NEW.salaire IS NULL THENRAISE EXCEPTION 'le salaire ne doit pas être null';END IF; -- pas de baisse de salaires !IF NEW.salaire < OLD.salaire THENRAISE EXCEPTION 'pas de baisse de salaire !';END IF; RETURN NEW;END;$verif_salaire$ LANGUAGE plpgsql; CREATE TRIGGER verif_salaire BEFORE INSERT OR UPDATE ON personneFOR EACH ROW EXECUTE PROCEDURE verif_salaire();

41 / 275 http://www.bull-formation.com

Page 42: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.11 IndexLes algorithmes suivants sont supportés :

• B-tree (par défaut)

• R-tree / GiST

• Hash

• GIN (version 8.2)

R-tree est désormais remplacé par GiST. Le terme reste par compatibilité.

Attention aux index hash ! Leur modification n'est pas enregistrée dans les journaux de transactions, ce qui amène deux problèmes. En cas de crash du serveur, il est fréquemment nécessaire de les reconstruire (REINDEX). De plus, ils ne sont pas restaurés avec PITR et donc avec le Log Shipping. Par ailleurs, ils ne sont pour le moment que rarement plus performants que les index B-Tree.

Pour une indexation standard , on utilise en général un index Btree.

Les index plus spécifiques (GIN, GIST) sont spécialisés pour les grands volumes de données complexes et multidimensionnelles : indexation textuelle, géométrique, géographique, ou de tableaux de données par exemple.

Plus d'informations : » http://fr.wikipedia.org/wiki/Arbre_B » http://en.wikipedia.org/wiki/R-tree » http://fr.wikipedia.org/wiki/Table_de_hachage » http://docs.postgresql.fr/current/textsearch-indexes.html

42 / 275 http://www.bull-formation.com

Page 43: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6 Sponsors & Références

• Sponsors

• Références françaises

• Références internationales

Au delà de ses qualités, PostgreSQL suscite toujours les mêmes questions récurrentes :

• “Qui finance les développements ? (et pourquoi ?)”

• “Qui utilise PostgreSQL ?

6.1 Sponsors• Sun Microsystems

• NTT (Streaming Replication)

• Fujitsu

• Red Hat (Tom Lane)

• Skype (projet skytools)

• EnterpriseDB (Bruce Momjian, Dave Page, Heikki Linnakangas, …)

• Dalibo (soutient la communauté française)

Depuis juin 2006, Sun Solaris embarque PostgreSQL dans sa distribution de base, comme base de données de référence pour ce système d'exploitation.

Le rachat de MySQL par SUN ne constitue pas un danger pour PostgreSQL. Au contraire, SUN a rappelé son attachement et son implication dans le projet.

http://www.news.com/Sun-backs-open-source-database-PostgreSQL/2100-1014_3-5958850.html

http://www.postgresqlfr.org/?q=node/1529

http://www.lemondeinformatique.fr/actualites/lire-sun-encourage-a-essayer-la-version-83-de-postgresql-25253.html

Le rachat de SUN par Oracle ne constitue pas non plus un danger bien qu'évidemment, les ressources consacrées à PostgreSQL, autant humaines que matérielles, ont toutes été

43 / 275 http://www.bull-formation.com

Page 44: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

annulées.

NTT finance un groupe de développeurs sur PostgreSQL, ce qui lui a permis de fournir de nombreux patchs pour PostgreSQL, le dernier en date concernant un système de réplication interne au moteur. Ce système est en cours d'inclusion dans la version de la communauté. Plus d'informations sur:

http://wiki.postgresql.org/wiki/Streaming_Replication

Ils travaillent à un outil de surveillance de bases PostgreSQL assez poussé qu'ils ont présenté lors de PGCon 2010.

Fujitsu a participé à de nombreux développements aux débuts de PostgreSQL.

Red Hat emploie Tom Lane à plein temps pour travailler sur PostgreSQL. Il peut dédier une très grande partie de son temps de travail à ce projet, bien qu'il ait d'autres affectations au sein de Red Hat. Il maintient quelques paquets RPM, dont ceux du SGBD PostgreSQL. Il leur assure une maintenance sur leur anciennes versions pour les distributions Red Hat à grande durée de vie.

Skype est apparu il y a deux/trois ans. Ils proposent un certain nombre d'outils très intéressants: pgBouncer (pooler de connexion), Londiste (réplication par trigger), etc. Ce sont des outils qu'ils utilisent en interne et qu'ils publient sous licence BSD comme retour à la communauté.

EnterpriseDB est une société anglaise qui a décidé de fournir une version de PostgreSQL propriétaire fournissant une couche de compatibilité avec Oracle. Ils emploient plusieurs codeurs importants du projet PostgreSQL (dont deux font partie de la « Core Team »), et reversent un certain nombre de leurs travaux au sein du moteur communautaire. Ils ont aussi un poids financier qui leur permet de sponsoriser la majorité des grands événements autour de PostgreSQL: PGEast et PGWest aux États-Unis, PGDay en Europe.

Dalibo participe aussi à sa mesure à la communauté. Elle est membre Gold de PostgreSQL Europe. Elle sponsorise des événements comme le PGDay italien, les PGDay français ainsi que la communauté francophone. Enfin, elle participe à de nombreux développements. Plus d'informations sur:

http://www.dalibo.org/contributions

6.2 Références• Yahoo

• Météo France

• RATP

• CNAF

44 / 275 http://www.bull-formation.com

Page 45: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.3 Yahoo• Yahoo !

• 2 Petaoctets !

• La flexibilité de l'open-source

• Économie de serveurs, économie d'énergies

Le 21 mai 2008, à l'occasion du rendez-vous annuel de PostgreSQL au Canada (PGCon 2008), Yahoo a annoncé détenir ce qui semble être la plus grande base de données en production connue à ce jour.

Les informations stockées sont des données structurées à propos des visiteurs de leur site web. Ces données sont utilisées pour améliorer la publicité en ciblant plus précisément les annonces commerciales. Pour cela, Yahoo doit effectuer des analyses très profondes des données récoltées.

Yahoo utilise PostgreSQL auquel est ajoutée une sur-couche logicielle spécifique, conçue pour exploiter le cluster de machines hébergeant les données. Ce cluster est composé d'environ 1 000 serveurs de type PC répartis dans différents datacenters.

Selon Yahoo, le nombre de serveurs est 10 à 20 % inférieur à ce qui est nécessaire pour d'autres solutions conventionnelles comme Oracle, IBM's DB2 ou Teradata.

Source :

http://blog.postgresql.fr/index.php?post/drupal/293

45 / 275 http://www.bull-formation.com

Page 46: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7 Conclusion

• Un projet de grande ampleur

• Un SGBD complet

• Souplesse, extensibilité

• De belles références

• Une solution stable, ouverte, performante et éprouvée

Certes, la licence BSD implique un coût nul, un code source disponible et aucune contrainte de redistribution. Toutefois, il serait erroné de réduire le succès de PostgreSQL à sa gratuite.

Beaucoup d'acteurs font le choix de leur SGBD sans se soucier de son prix. En l'occurrence, ce sont souvent les qualités intrinsèques de PostgreSQL qui séduisent :

• Sécurité des données (reprise en cas de crash et résistance aux bogues applicatifs)

• Facilité de configuration

• Montée en puissance et en charge progressive

• Gestion des gros volumes de données

7.1 Bibliographie• Documentation officielle (préface)

• Articles fondateurs de M. Stonebacker

• Présentation du projet PostgreSQL

« Préface : 2. Bref historique de PostgreSQL ». PGDG, 2010 http://docs.postgresqlfr.org/9.0/history.html

« The POSTGRES™ data model ». Rowe and Stonebraker, 1987 http://db.cs.berkeley.edu/papers/ERL-M85-95.pdf

« Présentation du projet PostgreSQL ». Guillaume Lelarge, 2008 http://www.dalibo.org/presentation_du_projet_postgresql

Iconographie :

46 / 275 http://www.bull-formation.com

Page 47: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

La photo initiale est le logo officiel de PostgreSQL : http://wiki.postgresql.org/wiki/Trademark_Policy

7.2 QuestionsN'hésitez pas, c'est le moment !

47 / 275 http://www.bull-formation.com

Page 48: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Installation de PostgreSQL

48 / 275 http://www.bull-formation.com

Page 49: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Introduction

• Installation depuis les sources

• Installation depuis les binaires

• Installation à partir de packages

• Installation sous windows

• Premiers réglages

• Mises à jours

1.1 Licence Creative Commons CC-BY-NC-SAVous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Cette formation (diapositives, manuels et travaux pratiques) est sous licence CC-BY-NC-SA.

Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'œuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'œuvre).

Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.

Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.

49 / 275 http://www.bull-formation.com

Page 50: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

À chaque réutilisation ou distribution de cette création, vous devez faire apparaître clairement au public les conditions contractuelles de sa mise à disposition. La meilleure manière de les indiquer est un lien vers cette page web.

Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits sur cette œuvre.

Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.

Le texte complet de la licence est disponible à cette adresse: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode

50 / 275 http://www.bull-formation.com

Page 51: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Installation à partir des sources

Étapes :

• Téléchargement

• Pré-requis

• Compilation

• Installation

Nous allons aborder ici les différentes étapes à réaliser pour installer PostgreSQL à partir des sources :

• Où trouver les fichiers sources ?

• Quelle version choisir ?

• Comment préparer le serveur pour accueillir PostgreSQL ?

• Quelle est la procédure de compilation ?

• Vérification et installation des fichiers compilés.

2.1 TéléchargementDisponible via :

• HTTP

• FTP

Télécharger le fichier postgresql-X.Y.Z.tar.gz

Les fichiers sources et les instructions de compilation sont disponibles sur le site officiel du projet : http://www.postgresql.org/download/

Un serveur FTP anonyme est également mis à la disposition des internautes : ftp://ftp.postgresql.org

Le fichier à télécharger se présente toujours sous la forme « postgresql-X-Y-Z.tar.gz » où X représente la branche des sources, Y leur version majeure et Z la mineure.

Lorsque la future version du logiciel est en phase de démonstration (alpha) ou de test (versions bêta), les sources sont accessibles à ces adresses :

51 / 275 http://www.bull-formation.com

Page 52: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• http://www.postgresql.org/developer/alpha

• http://www.postgresql.org/developer/beta

Voici comment récupérer la dernière version des sources de PostgreSQL :

• Aller sur la page d'accueil du projet PostgreSQL

• Cliquer sur le lien « Downloads »

52 / 275 http://www.bull-formation.com

Page 53: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Cliquer sur le lien « source code »

53 / 275 http://www.bull-formation.com

Page 54: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Cliquer sur le lien « v9.0.3 » (la 9.0.3 était la dernière version disponible lors de la mise à jour de cette présentation mais utilisez la version la plus récente possible)

54 / 275 http://www.bull-formation.com

Page 55: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Cliquer sur le lien « postgresql-9.0.3.tar.bz2 »

55 / 275 http://www.bull-formation.com

Page 56: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Cliquer sur le serveur le plus proche de vous (les serveurs français à priori)

56 / 275 http://www.bull-formation.com

Page 57: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Sélectionner le répertoire où vous voulez placer les sources et cliquer sur « OK »

• Les sources sont téléchargés.

57 / 275 http://www.bull-formation.com

Page 58: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.2 CompilationProcessus:

$ tar zxvf postgresql-X.Y.Z.tar.gz$ cd postgresql-X.Y.Z$ ./configure$ gmake

La compilation de PostgreSQL suit un processus classique.

Comme pour tout programme fourni sous forme d'archive tar, nous commençons par décompacter l'archive dans un répertoire. Le répertoire de destination pourra être celui de l'utilisateur postgres (~) ou bien dans un répertoire partagé dédié aux sources (/usr/src/postgres par exemple) afin de donner l'accès aux sources du programme ainsi qu'à la documentation à tous les utilisateurs du système.

$ cd ~$ tar zxvf postgresql-X.Y.Z.tar.gz

Une fois l'archive extraite, il faut dans un premier temps lancer le script d'auto-configuration des sources. Attention aux options de configuration !

$ cd postgresql-X.Y.Z$ ./configure [OPTIONS]

Il reste alors à compiler les sources de PostgreSQL pour en construire les différents exécutables:

$ gmake

Attention ! gmake est la commande make des outils GNU. Sous Linux, elle est habituellement renommée en make !

58 / 275 http://www.bull-formation.com

Page 59: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.3 Compilation : optionsQuelques options de configuration notables:

• –prefix=répertoire

• –with-pgport

• –with-openssl

• –enable-nls

• –with-perl

• –with-tcl

Le script d'auto-configuration possède un certain nombre de paramètre optionnels. Parmi toutes ces options, citons les suivantes qui sont probablement les plus intéressantes:

• –prefix=répertoire: permet de définir un répertoire d'installation personnalisé (par défaut, il s'agit de /usr/local/pgsql)

• –with-pgport: permet de définir un port par défaut différent de 5432

• –with-openssl: permet d'activer le support d'OpenSSL pour bénéficier de connexions chiffrées

• –enable-nls: permet d'activer le support de la langue utilisateur pour les messages provenant du serveur et des applications

• –with-perl: permet d'installer l'interface Perl ainsi que les extensions Perl de PostgreSQL

• –with-tcl: permet d'installer l'interface Tcl ainsi que les extensions Tcl de PostgreSQL.

2.4 Compilation : optionsPour retrouver les options de compilation a postériori

pg_config --configure

Il est possible de retrouver les options de compilation utilisées pour une installation donnée de PostgreSQL a posteriori grâce à la commande pg_config.

En voici un exemple d'exécution:

59 / 275 http://www.bull-formation.com

Page 60: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

$ pg_config --configure '--prefix=/usr' '--mandir=/usr/share/postgresql/8.4/man' '--with-docdir=/usr/share/doc/postgresql-doc-8.4' '--datadir=/usr/share/postgresql/8.4' '--bindir=/usr/lib/postgresql/8.4/bin' '--libdir=/usr/lib/postgresql/8.4/lib' '--includedir=/usr/include/postgresql/8.4' '--enable-nls' '--enable-integer-datetimes' '--enable-thread-safety' '--enable-debug' '--disable-rpath' '--with-tcl' '--with-perl' '--with-python' '--with-pam' '--with-krb5' '--with-openssl' '--with-gnu-ld' '--with-tclconfig=/usr/lib/tcl8.5' '--with-tkconfig=/usr/lib/tk8.5' '--with-includes=/usr/include/tcl8.5' '--with-system-tzdata=/usr/share/zoneinfo' '--sysconfdir=/etc/postgresql-common' '--with-gssapi' '--with-libxml' '--with-libxslt' '--with-ldap' '--with-ossp-uuid' 'CFLAGS= -fPIC' 'LDFLAGS= -Wl,--as-needed'

2.5 Tests de régressionVérification des exécutables construits

$ gmake check

Il est possible d'effectuer des tests avec les exécutables fraîchement construits grâce à la commande suivante:

$ gmake check[...] rm -rf ./testtablespace mkdir ./testtablespace ./pg_regress --inputdir=. --dlpath=. --multibyte=SQL_ASCII --temp-install=./tmp_check --top-builddir=../../.. --schedule=./parallel_schedule ============== creating temporary installation ============== ============== initializing database system ============== ============== starting postmaster ============== running on port 57332 with pid 9843 ============== creating database "regression" ============== CREATE DATABASE ALTER DATABASE ============== running regression test queries ============== test tablespace ... ok parallel group (17 tests): char name text boolean varchar txid int2 int4 oid float4 money float8 uuid int8 enum bit numeric boolean ... ok char ... ok name ... ok varchar ... ok text ... ok ...

Les tests de régression sont une suite de tests qui vérifient que PostgreSQL fonctionne

60 / 275 http://www.bull-formation.com

Page 61: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

correctement sur la machine cible. Ces tests ne doivent pas être exécutés en tant qu'utilisateur root. Le fichier src/test/regress/README et la documentation contiennent des détails sur l'interprétation des résultats de ces tests.

2.6 InstallationInstallation

$ gmake install

Pour installer les fichiers compilés, exécuter la commande suivante en tant que super-utilisateur (root) :

$ gmake install

Cette commande installe les fichiers dans les répertoires spécifiés à l'étape de configuration, notamment via l'option –prefix. Sans précision dans l'étape de configuration, les fichiers sont installés dans le répertoire /usr/local/pgsql.

L'installation standard fournit seulement les fichiers en-têtes nécessaires pour le développement d'applications clientes ainsi que pour le développement de programmes côté serveur comme des fonctions personnelles ou des types de données écrits en C.

Avant PostgreSQL 8.0, une commande gmake install-all-headers séparée était nécessaire pour ce dernier point mais cette étape a été intégrée à l'installation standard.

2.7 Post-installation 1/2Variables d'environnement

Importante:

export PATH=$PATH:/usr/local/pgsql/bin

Optionnelles:

export MANPATH=$MANPATH:/usr/local/pgsql/share/manexport PGLIB=/usr/local/pgsql/libexport PGDATA=/usr/local/pgsql/data

61 / 275 http://www.bull-formation.com

Page 62: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Pour utiliser PostgreSQL correctement, il est nécessaire de positionner un certain nombre de variables d'environnement.

Afin de rendre l'exécution de PostgreSQL possible à partir de n'importe quel répertoire, il est essentiel d'ajouter le répertoire d'installation des exécutables (/usr/local/pgsql/bin par défaut ou le chemin indiqué à l'option –prefix lors de l'étape configure) aux chemins de recherche. Pour cela, nous modifions la variable d'environnement PATH :

export PATH=$PATH:/usr/local/pgsql/bin

D'autres variables d'environnement peuvent éventuellement être utiles:

• MANPATH pour ajouter aux chemins de recherche des pages de manuel celui de votre installation de PostgreSQL

• PGLIB pour indiquer à PostgreSQL où se trouvent les différentes bibliothèques de fonctions dont il aura besoin

• PGDATA qui sera consulté par différents exécutables de PostgreSQL pour déterminer où se trouve le répertoire de travail de l'instance

Voici un exemple avec ces trois variables:

export MANPATH=$MANPATH:/usr/local/pgsql/share/manexport PGLIB=/usr/local/pgsql/libexport PGDATA=/usr/local/pgsql/data

Afin de vous éviter d'avoir à redéfinir ces variables d'environnement après chaque redémarrage du système, il est conseillé d'inclure ces lignes dans votre fichier ${HOME}/.profile ou dans /etc/profile.

2.8 Post-installation 2/2Création de l'instance de base de données

$ initdb -D /usr/local/pgsql/data

Notez que vous devez exécuter cette commande en étant connecté sous le compte de l'utilisateur PostgreSQL décrit dans la section précédente (utilisateur postgres).

Si le répertoire n'existe pas, initdb tentera de le créer. Toutefois, vous devez veiller à ce qu'il ait les droits pour le faire.

Voici ce qu'affiche cette commande :

62 / 275 http://www.bull-formation.com

Page 63: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

$ initdb -D /usr/local/pgsql/dataThe files belonging to this database system will be owned by user "postgres".This user must also own the server process.

The database cluster will be initialized with locale fr_FR.UTF-8.The default database encoding has accordingly been set to UTF8.The default text search configuration will be set to "french".

creating directory /usr/local/pgsql/data ... okcreating subdirectories ... okselecting default max_connections ... 100selecting default shared_buffers ... 24MBcreating configuration files ... okcreating template1 database in /usr/local/pgsql/data/base/1 ... okinitializing pg_authid ... okinitializing dependencies ... okcreating system views ... okloading system objects' descriptions ... okcreating conversions ... okcreating dictionaries ... oksetting privileges on built-in objects ... okcreating information schema ... okloading PL/pgSQL server-side language ... okvacuuming database template1 ... okcopying template1 to template0 ... okcopying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connectionsYou can change this by editing pg_hba.conf or using the -A option thenext time you run initdb.

Success. You can now start the database server using:

postgres -D /usr/local/pgsql/dataor pg_ctl -D /usr/local/pgsql/data -l logfile start

Avec ces informations, nous pouvons conclure que initdb fait les actions suivantes :

• détection de l'utilisateur, de l'encodage et de la locale

• création du répertoire $PGDATA (/usr/local/pgsql/data dans ce cas)

• création des sous-répertoires

• création et modification des fichiers de configuration

• création de la base template1

• ajout des objets système

• exécution d'un VACUUM sur cette base

• création de la base template0 à partir de la base template1

• création de la base postgres à partir de la base template1

• affichage de quelques informations supplémentaires

63 / 275 http://www.bull-formation.com

Page 64: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.9 LancementPremier démarrage

$ postmaster -D /usr/local/pgsql/data >logfile 2>&1 &

La commande pg_ctl permet de faire la même chose plus simplement. Elle comprend différentes actions permettant de démarrer PostgreSQL, de l'arrêter, de lui faire relire sa configuration, etc.

Ces deux commandes peuvent avantageusement être remplacées par un script postgresql placé dans le répertoire init.d ou par la commande pg_ctl. Un script d'exemple est disponible dans le sous-répertoire contrib/start-scripts du répertoire des sources.

64 / 275 http://www.bull-formation.com

Page 65: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3 Installation à partir des binaires

• Packages Debian : Debian, Ubuntu

• Packages RPM : Redhat / Fedora / Suse

Pour une utilisation en environnement de production, il est généralement préférable d'installer les paquets binaires préparés spécialement pour la distribution utilisée.

3.1 Paquets debian officiels• Différents paquets disponibles

• aptitude install postgresql-x.x

• installe les binaires

• crée l'utilisateur « postgres »

• exécute initdb

• démarre le serveur

Sous Debian/Ubuntu, l'installation de PostgreSQL a été découpée en plusieurs paquets:

• partie serveur: postgresql-x.x

• partie clients: postgresql-client-x.x

• autres paquets utiles: postgresql-contrib-x.x, postgresql-doc-x.x

Pour utiliser des procédures stockées, il est nécessaire d'installer le paquet correspondant au langage procédural retenu :

$ aptitude install postgresql-plpython-x.x $ aptitude install postgresql-plperl-x.x $ aptitude install postgresql-pltcl-x.x

Si le serveur PostgreSQL est un serveur de développement, il est recommandé d'installer également les bibliothèques de développement :

$ aptitude install postgresql-server-dev-x.x

65 / 275 http://www.bull-formation.com

Page 66: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.2 Backports Debian• Ajouter le dépôt « backports.org »

• Mettre à jour la base des paquets disponibles

• Installer les paquets nécessaires

La version stable de Debian n'intègre pas les versions les plus récentes de PostgreSQL. Pour utiliser une version courante sur un serveur stable, il est souvent nécessaire de réaliser un « backport » depuis un paquet de la distribution testing ou unstable de Debian.

Cependant, un dépôt regroupant bon nombre de ces backports existe déjà. Par exemple, pour installer la version 9.0 sur une Debian Squeeze (6.0, la dernière version stable), il faut ajouter le dépôt de « backports.org » dans le fichier /etc/apt/sources.list :

deb http://backports.debian.org/debian-backports squeeze-backports main

Puis mettre à jour la base de paquets disponible :

aptitude update

Et enfin installer PostgreSQL 8.4 en sélectionnant la source backport :

aptitude -t lenny-backports install postgresql-9.0

3.3 RedHat / Fedora / Suse• yum install postgresql postgresql-server

• /etc/init.d/postgresql initdb

• /etc/init.d/postgresql start

Le paquet RPM crée l'utilisateur postgres. Contrairement au paquet Debian, il faut lancer manuellement l'opération d'initdb.

Avant la version 9.0, il n'était possible d'installer qu'une seule version de PostgreSQL sur un serveur. Cela a changé avec la version 9.0.

66 / 275 http://www.bull-formation.com

Page 67: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Conflit SELinux

Des conflits fréquents ont été identifiés entre SELinux et PostgreSQL sur les distributions Fedora et RedHat.

Plus d'informations : http://wiki.postgresql.org/wiki/PostgreSQL_and_SELinux

67 / 275 http://www.bull-formation.com

Page 68: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4 Installation sous Windows

• PostgreSQL 8.2 et supérieur uniquement

• Disponible pour Windows 2000, XP, 2003, 2008, 7

• Disponible en 64 bits à partir de la version 9.0

• Installeur graphique ou archive des binaires

Le portage de PostgreSQL sous Windows date de sa version 8.0. À ce moment là, le travail qu'il a nécessité fût suffisamment important pour justifier à lui seul le passage de la branche 7 à la branche 8 du projet.

Comme toujours, la politique du projet a imposé de marquer ce portage comme étant au niveau de la démonstration (béta) et le restera pendant 2 ans. La version 8.2 a donc été la première version déclarée stable sous Windows et officiellement supportée par le projet.

68 / 275 http://www.bull-formation.com

Page 69: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.1 Installeur graphique - bienvenue

Installeur graphique - bienvenue

69 / 275 http://www.bull-formation.com

Page 70: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.2 Installeur graphique - répertoire d'installation

Installeur graphique - répertoire d'installation

70 / 275 http://www.bull-formation.com

Page 71: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.3 Installeur graphique - répertoire données

Installeur graphique - répertoire données

71 / 275 http://www.bull-formation.com

Page 72: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.4 Installeur graphique - mot de passe

Installeur graphique - mot de passe

72 / 275 http://www.bull-formation.com

Page 73: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.5 Installeur graphique - port

Installeur graphique - port

73 / 275 http://www.bull-formation.com

Page 74: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.6 Installeur graphique - autres

Installeur graphique - autres

74 / 275 http://www.bull-formation.com

Page 75: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.7 Installeur graphique - prêt

Installeur graphique - prêt

75 / 275 http://www.bull-formation.com

Page 76: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.8 Installeur graphique - terminé

Installeur graphique - terminé

À ce moment-là, un nouvel utilisateur a été créé avec le nom postgres. La commande initdb a été exécuté pour créer le répertoire des données. Un service a été ajouté pour lancer automatiquement le serveur au démarrage de Windows. Un sous-menu du menu Démarrage contient le nécessaire pour interagir avec le serveur PostgreSQL. Il est à noter que cet installeur a aussi installé pgAdmin, dans une version compatible avec la version du serveur PostgreSQL.

Cet installeur existe aussi sous Mac OS X et sous Linux. Autant il est préférable de passer par les paquets de sa distribution Linux, autant il est recommandé d'utiliser cet installeur Mac OS X.

76 / 275 http://www.bull-formation.com

Page 77: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5 Premiers réglages

• Sécurité

• Configuration minimale

• Démarrage

• Tests

5.1 Sécurité• Politique de mot de passe de l'utilisateur postgres système

• Politique de mot de passe pour le rôle postgres

• Règles d'accès à l'instance dans pg_hba.conf

Selon l'environnement et la politique de sécurité interne à l'entreprise, nous aurons potentiellement à placer un mot de passe à l'utilisateur système postgres:

$ passwd postgres

Ne pas confondre cet utilisateur système avec le rôle postgres, interne au cluster PostgreSQL, peut nécessiter lui aussi un mot de passe en fonction du contexte:

ALTER ROLE postgres ENCRYPTED PASSWORD 'mot de passe';

Si vous avez utilisé l'installeur proposé par EnterpriseDB, l'utilisateur postgres (Unix et PostgreSQL) a déjà un mot de passe, celui demandé par l'installeur. Donc il n'est pas nécessaire de lui en configurer un autre.

Enfin, vérifier les règles d'accès au serveur contenues dans le fichier pg_hba.conf. Ces règles définissent les accès à l'instance en se basant sur plusieurs paramètres: utilisation du réseau ou du socket fichier, en SSL ou non, depuis quel réseau si applicable, en utilisant quel rôle, pour quelle base de données et avec type d'authentification.

77 / 275 http://www.bull-formation.com

Page 78: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.2 Configuration minimale• Fichier postgresql.conf

• Configuration du moteur

• Plus de 200 paramètres

• Quelques paramètres essentiels

La configuration du moteur se fait via un seul fichier, le fichier postgresql.conf. Il se trouve généralement dans le répertoire des données du serveur PostgreSQL. Sous certaines distributions (Debian et affiliés principalement), il est déplacé dans un sous-répertoire du répertoire /etc.

Ce fichier contient beaucoup de paramètres, plus de 200, mais seuls quelques-uns sont essentiels à connaître pour avoir de bonnes performances.

5.3 Configuration des connexions• listen_addresses = '*'

• port = 5432

• max_connections = 100

Par défaut, le serveur installé n'écoute pas sur les interfaces réseaux externes. Pour autoriser les clients externes à se connecter à PostgreSQL, il faut modifier le paramètre listen_addresses. La valeur * est un joker indiquant que PostgreSQL doit écouter sur toutes les interfaces réseaux disponibles au moment où il est lancé. Il est aussi possible d'indiquer les interfaces, une à une, en les séparant avec des virgules.

Le port par défaut des connexions TCP/IP est le 5432. Il est possible de le modifier. Cela n'a réellement un intérêt que si vous voulez exécuter plusieurs serveurs PostgreSQL sur le même serveur (physique ou virtuel). En effet, plusieurs serveurs sur une même machine ne peuvent pas écouter sur le même port.

Le nombre de connexions simultanées est limité par le paramètre max_connections. Dès que ce nombre est atteint, les connexions suivantes sont refusées jusqu'à ce qu'un utilisateur connecté se déconnecte. La valeur par défaut de 100 est généralement suffisante. Il peut être intéressant de la diminuer (pour que chaque processus ait accès à plus de mémoire) ou de l'augmenter (pour qu'un plus grand nombre d'utilisateurs puisse se connecter en même temps). Attention toutefois à ne pas dépasser 1000 car cela serait source de contre-performance.

78 / 275 http://www.bull-formation.com

Page 79: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.4 Configuration des ressources mémoires• shared_buffers

• work_mem

• maintenance_work_mem

Chaque fois que PostgreSQL a besoin de lire ou écrire des données, il les place d'abord dans son cache interne. Ce cache ne sert qu'à ça : stocker des blocs disques qui sont accessibles à tous les processus PostgreSQL, ce qui permet d'éviter de trop fréquents accès disques car ces accès sont lents. La taille de ce cache dépend d'un paramètre appelé shared_buffers. Sur un serveur dédié à PostgreSQL, une valeur d'un quart de la mémoire vive totale est généralement suffisante. Suivant les cas, une valeur inférieure ou supérieure sera encore meilleure pour les performances. À vous de tester ce qui vous convient le mieux. Attention que l'augmentation de cette valeur peut nécessiter la modification du paramètre système SHMMAX pour que PostgreSQL ait le droit de réclamer autant de mémoire au démarrage.

work_mem et maintenance_work_mem sont des paramètres mémoires utilisés par chaque processus. work_mem est la taille de la mémoire allouée aux opérations de tri et hachage, alors que maintenance_work_mem est la taille de la mémoire pour les VACUUM, CREATE INDEX et ajout de clé étrangère. Cette mémoire peut être allouée plusieurs fois par connexions PostgreSQL. Donc, si votre max_connexions est important, ces valeurs (en fait, surtout work_mem) devront être faible. Alors que si votre max_connections est faible, ces valeurs pourront être augmentées.

5.5 Configuration des journaux de transactions• fsync

À chaque qu'une transaction est validée (COMMITée), PostgreSQL écrit les modifications qu'elle a généré dans les journaux de transactions. Puis il donne l'ordre au système d'exploitation d'écrire les données sur le disque. Cela va forcément causer des ralentissements mais cette opération est essentielle. En effet, si PostgreSQL ne le fait pas, les données pourraient rester dans le cache du système d'exploitation. En cas de crash, les données seraient perdues. Le paramètre fsync permet de désactiver l'envoi de l'ordre de synchronisation au système d'exploitation. Ce paramètre ne doit jamais être désactivé en production.

79 / 275 http://www.bull-formation.com

Page 80: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.6 Configuration des ressources mémoires• log_destination

• logging_collector

• log_line_prefix

• lc_messages

PostgreSQL dispose de plusieurs moyens pour enregistrer les traces : soit il les envoie sur la sortie des erreurs (stderr et csvlog), soit il les envoie à syslog (syslog, seulement sous Unix), soit il les envoie au journal des événements (eventlog, sous Windows uniquement). Dans le cas où les traces sont envoyées sur la sortie des erreurs, il peut récupérer les messages via un démon appelé « log collector » qui va enregistrer les messages dans des fichiers. Ce démon s'active en configurant le paramètre logging_collector à on. Si vous faites cela, n'oubliez pas de changer le préfixe des messages pour ajouter au moins l'horodatage (log_line_prefix = '%t' ). Des traces sans date et heure ne servent à rien.

Beaucoup d'utilisateurs français récupèrent les traces de PostgreSQL en français. Bien que cela semble une bonne idée au départ, cela se révèle être souvent un problème. Non pas à cause de la qualité de la traduction, mais plutôt parce que les outils de traitement des traces fonctionnent uniquement avec des traces en anglais. Même l'outil pgFouine, pourtant écrit par un Français, ne sait pas interpréter des traces en français. De plus, la moindre recherche sur Internet ramènera plus de liens avec des traces en anglais.

5.7 Configuration des démons• autovacuum

• stats collector

En dehors du « log collector », PostgreSQL dispose d'autres démons. L'autovacuum joue un rôle important pour de bonnes performances : il empêche une fragmentation excessive des tables et index, et met à jour les statistiques sur les données (qui servent à l'optimiseur de requêtes). Le collecteur de statistiques sur l'activité permet le bon fonctionnement de l'autovacuum et donne de nombreuses informations importantes à l'administrateur de bases de données.

Ces deux démons devraient toujours être activés.

80 / 275 http://www.bull-formation.com

Page 81: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.8 DémarrageMéthodes de démarrage :

• $ /etc/init.d/postgresql start

• $ pg_ctl -D $PGDATA start

• $ postmaster -D $PGDATA

Suivant le type d'installation effectuée et la distribution du serveur, un script de contrôle est placé dans le répertoire init.d :

$ /etc/init.d/postgresql start

Les paquets Debian installent un script de démarrage dont le nom dépend de la version majeure de PostgreSQL (par exemple /etc/init.d/postgresql-9.0. Les paquets RPM utilisent ce nommage à partir de la version 9.0.

Cette première méthode est utile pour gérer le démarrage de PostgreSQL au démarrage du serveur. Attention toutefois, sous les distributions basée sur les paquets .deb, ces scripts d'initialisation peuvent contrôler plusieurs instances à la fois !

Il est également possible de lancer le serveur en utilisant la commande pg_ctl fournie avec les binaires de PostgreSQL :

$ pg_ctl -D /chemin/vers/PGDATA start $ # avec la variable d'environnement $PGDATA$ pg_ctl start

Cette méthode permet un contrôle plus fin sur le processus concerné.

Enfin, il est possible de démarrer le service en appelant directement l'exécutable postgres :

$ postgres -D $PGDATA

Cette dernière méthode est surtout utile à des fin de tests, celle-ci pouvant prendre des paramètres de configuration directement sur la ligne de commande.

81 / 275 http://www.bull-formation.com

Page 82: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.9 TestsPremiers tests

• Création d'une première base de donnée

• Premières connexions à la base

La procédure de test suivante tente de créer une base de donnée, puis de s'y connecter par deux méthodes différentes (socket et TCP/IP) :

su - postgrescreatedb mabasepsql mabasepsql -h localhost mabase

Ces premiers tests impliquent que l'instance soit configuré avec une authentification ident ou trust.

82 / 275 http://www.bull-formation.com

Page 83: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6 Mise à jour

• Recommandations

• Sauvegarde des données

• Mise à jour

• Restauration

6.1 Recommandations• Les « Release Notes »

• Intégrité des données

• Migration des données

• Méthode dump/restore

• Méthode Slony

• Méthode pg_upgrade

Chaque nouvelle version de PostgreSQL est accompagnée d'une note expliquant les améliorations, les corrections et les innovations apportées par cette version, qu'elle soit majeure ou mineure. Ces notes contiennent toujours une section dédiée aux mises à jour dans laquelle on trouve des conseils essentiels.

Les « Releases Notes » sont présentes dans l'annexe E de la documentation officielle (http://docs.postgresql.fr/current/release.html).

Les données de votre instance PostgreSQL sont toujours compatibles d'une version mineure à l'autre. Ainsi, les mises à jour vers une version mineure supérieure peuvent se faire sans migration de donnée, sauf cas exceptionnel qui serait alors précisé dans les notes de version (exemple: de la 8.1.14 à la 8.1.15, il est nécessaire de reconstruire les index de type GiST : « Also, if you were running a previous 8.1.X release, it is recommended to REINDEX all GiST indexes after the upgrade. », )). Pensez éventuellement à faire une sauvegarde préalable par sécurité.

À contrario, si la mise à jour consiste en un changement de version majeure (exemple : de 8.4.5 à 9.0.1), alors il est nécessaire de s'assurer que les données seront transférées correctement sans incompatibilité. Là encore il est important de lire les « Releases Notes » avant la mise à jour. Il existe 3 méthodes pour migrer les données:

83 / 275 http://www.bull-formation.com

Page 84: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• fichier intermédiaire : sauvegarder les bases avec la commande pg_dump, installer la nouvelle version, créer un nouveau répertoire des données et restaurer les bases avec la commande pg_restore.

• 2 versions en parallèle : installer la nouvelle version de PostgreSQL sans désinstaller l'ancienne, faire fonctionner les deux versions en même temps, puis effectuer le transfert des données entre les deux instances. Cette méthode est plus complexe mais elle permet d'éviter d'interrompre le service.

• pg_upgrade1 : à partir de la 8.4, l'utilisation du module contrib pg_upgrade permet de mettre à jour un cluster 8.3 en 8.4 ou 8.4 en 9.0 « sur place ». Cette technique peut-être 3 à 10 fois plus rapide qu'une sauvegarde/restauration 2. Attention toutefois à l'utilisation de modules de contrib dans vos bases qui pourraient empêcher ce type de mise à jour.

Enfin, il est également possible d'utiliser un mécanisme de réplication de type Slony-I pour effectuer la migration des données.

6.2 SauvegardeUtilitaires de sauvegarde

• pg_dump

• pg_dumpall

Avant toute opération de mise à jour du serveur, une sauvegarde intégrale des données du système est obligatoire.

Pour sauvegarder une base de données, utilisez l'outil pg_dump :

$ pg_dump <ma_base> > sauvegarde.sql

Cette outil ne sauvegardera qu'une seule et unique base. Cependant, il ne sauvegardera pas la définition des objets globaux de l'instance (autrement dit les rôles et les tablespaces).

Pour sauvegarder toutes les bases de données d'une instance PostgreSQL, utilisez l'outil pg_dumpall :

$ pg_dumpall > sauvegarde.out

Ce dernier sauvegardera toute l'instance objets globaux inclus, dans un fichier SQL unique.

1 nommé pg_migrator sous 8.42 cf.

84 / 275 http://www.bull-formation.com

Page 85: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.3 Mise à jour majeure 1/2 : Sauvegarde et Mise à jour

Sauvegarde et mise à jour

$ pg_dumpall > sauvegarde.out$ pg_ctl stop$ mv /usr/local/pgsql /usr/local/pgsql.old$ cd ~/postgresql-x.x.x$ make install$ initdb -D /usr/local/pgsql/data$ postmaster -D /usr/local/pgsql/data

Voici un exemple de procédure de mise à jour:

Sauvegarde du cluster :

$ pg_dumpall > sauvegarde.out

Arrêt de l'ancienne instance PostgreSQL :

$ pg_ctl stop

Archivage des binaires et de l'ancien $PGDATA. Il pourra être détruit une fois la migration validée:

$ mv /usr/local/pgsql /usr/local/pgsql.old

Installation de la nouvelle version de PostgreSQL :

$ cd ~/postgresql-x.x.x$ make install

Création et démarrage d'un nouveau cluster :

$ initdb -D /usr/local/pgsql/data$ postmaster -D /usr/local/pgsql/data

85 / 275 http://www.bull-formation.com

Page 86: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.4 Mise à jour majeure 2/2 : RestaurationRestauration des données

psql -f sauvegarde.out template1

Une fois la nouvelle version installée, il ne reste plus qu'à injecter les données sauvegardées à l'étape précédente :

psql -f sauvegarde.out template1

Compatibilité des donnés

Lorsque l'on effectue une mise à jour entre deux versions majeures, il faut s'assurer de la compatibilité des données avant toute opération de migration.

86 / 275 http://www.bull-formation.com

Page 87: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7 Conclusion

• L'installation est simple….

• … mais elle doit être soigneusement préparée

• Préférer les paquets officiels.

• Attention aux données lors d'une mise à jour !

7.1 Pour aller plus loin• Documentation officielle, chapitre Installation

• Documentation Dalibo, pour l'installation sur Windows

Vous pouvez retrouver la documentation en ligne sur : http://docs.postgresql.fr/current/installation.html

ainsi que la partie spécifique à l'installation sur : http://docs.postgresql.fr/current/INSTALL.html

Les documentations de Dalibo pour l'installation de PostgreSQL sur Windows sont disponibles sur :

• http://www.dalibo.org/installation_de_postgresql_8.3_sous_windows

• http://www.dalibo.org/installation_de_postgresql_8.4_sous_windows

• http://www.dalibo.org/installation_de_postgresql_9.0_sous_windows

7.2 QuestionsN'hésitez pas, c'est le moment !

87 / 275 http://www.bull-formation.com

Page 88: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Travaux pratiques

88 / 275 http://www.bull-formation.com

Page 89: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Énoncés

1.1 Installation de paquets binaires

1.1.1 Pré-installationQuelle commande permet d'installer les paquets binaires de PostgreSQL ? Quelle version est packagée ? Quels paquets devront également être installés ?

1.1.2 InstallationExécuter la commande d'installation

1.1.3 DémarrageComment démarrer le serveur ?

1.1.4 Emplacement des fichiersOù ont été placés les fichiers installés? Où se trouvent les fichiers de configuration? Où est le répertoire $PGDATA ?

1.1.5 ConfigurationVérifier la configuration par défaut de PostgreSQL. Est-ce que le serveur écoute sur le réseau ?

1.1.6 Jeu de donnéesInsérer le jeu de données fourni

1.2 Installation à partir des sources

1.2.1 SauvegardeLa priorité est d'assurer la sécurité des données. Faire un copie de sauvegarde des données lors de l'installation précédente, puis arrêter le serveur installé précédemment

1.2.2 TéléchargementSur le site officiel du projet, télécharger les fichiers sources de la dernière version

89 / 275 http://www.bull-formation.com

Page 90: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

(PostgreSQL 9.0)

1.2.3 Environnement de compilationVérifier que les logiciels de compilation sont installés

1.2.4 Compilation et installationConfigurer puis compiler les sources. Ensuite installer les fichiers obtenus

1.2.5 LancementInitialiser et démarrer le serveur

1.3 Migration des données

1.3.1 VérificationVérifier que les données de la version packagée peuvent être injectées sans risque dans la version compilée

1.3.2 RestaurationRestaurer les données

1.4 Pour aller plus loin1. Faire fonctionner simultanément les deux versions de PostgreSQL sur deux machines

différentes

2. Transférer les données présentes sur la version « packagée » vers la version compilée

90 / 275 http://www.bull-formation.com

Page 91: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Solutions

2.1 Installation de paquets binaires

2.1.1 Pré-installationTout dépend de votre distribution. Le gestionnaire de package de Mandriva est urpmi alors que celui de Debian est aptitude. Celui de la Fedora et autres compatibles RedHat est yum.

La dernière version stable disponible de PostgreSQL est la 9.0.3. La dernière version binaire dépend là-aussi de votre distribution.

Le paquet libpq devra également être installé.

2.1.2 InstallationSous Debian:

aptitude install postgresql-9.0

Sous Fedora:

yum install postgresql postgresql-server

2.1.3 DémarrageLe serveur est initialisé grâce à la commande :

/etc/init.d/postgresql start

Attention, sous Debian, le script contient aussi le numéro de version :

/etc/init.d/postgresql-9.0 start

2.1.4 Emplacement des fichiersLes fichiers de configuration de PostgreSQL se trouvent dans le répertoire ”/var/lib/pgsql/data/”, sauf sous Debian où ils se trouvent dans le répertoire ”/etc/postgresql/9.0/main” pour une version 9.0.

91 / 275 http://www.bull-formation.com

Page 92: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.1.5 ConfigurationPar défaut, le serveur écoute uniquement l'interface réseau 'localhost'.

2.1.6 Jeu de données

cd /formation/cd tpbash create_db.sh

(cette opération peut prendre un peu de temps)

2.2 Installation à partir des sources

2.2.1 SauvegardeSauvegarde de toutes les bases de données dans le fichier “sauvegarde.tp.partie1.dump” :

su - postgrescdpg_dumpall > sauvegarde.tp.partie.dump

Arrêt du serveur :

exit/etc/init.d/postgresql stop

2.2.2 TéléchargementSur le site officiel du projet, télécharger les fichiers sources de la dernière version (PostgreSQL 9.0)

cd /tmpwget ftp://ftp3.fr.postgresql.org/../postgresql-9.0.3.tar.gztar zxf postgresql-9.0.3.tar.gzcd postgresql-9.0.3

2.2.3 Environnement de compilationVérifier que les logiciels de compilation sont installés :

dpkg -l | grep -E 'gcc|make'

(sous Fedora, RedHat ou CentOS, il faudra utiliser yum)

92 / 275 http://www.bull-formation.com

Page 93: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.2.4 Compilation et installationConfigurer puis compiler les sources de PostgreSQL :

./configuremake

(cette opération peut prendre du temps)

Ensuite installer les fichiers obtenus, en tant qu'utilisateur “root”:

make install

2.2.5 LancementInitialiser et démarrer le serveur:

mkdir /usr/local/pgsql/datachown postgres /usr/local/pgsql/datasu - postgres/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logf 2>&1/usr/local/pgsql/bin/createdb test/usr/local/pgsql/bin/psql test

2.3 Migration des données

2.3.1 VérificationLire la page de « Release Notes »:

http://www.postgresql.org/docs/current/interactive/release-9-0.html

2.3.2 RestaurationRestaurer les données:

su - postgrescd/usr/local/pgsql/bin/psql < sauvegarde.tp.partie1.dump

93 / 275 http://www.bull-formation.com

Page 94: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Outils graphiques

94 / 275 http://www.bull-formation.com

Page 95: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Préambule

1. Concevoir

2. Administrer

3. Maintenir

4. Sauvegarder

1.1 Au menu• Druid

• pgAdmin

• phpPgAdmin

1.2 Objectifs• Se familiariser avec les outils graphiques

• Manipuler la base

1.3 Licence Creative Commons CC-BY-NC-SAVous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Cette formation (diapositives, manuels et travaux pratiques) est sous licence CC-BY-NC-

95 / 275 http://www.bull-formation.com

Page 96: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

SA.

Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'œuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'œuvre).

Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.

Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.

À chaque réutilisation ou distribution de cette création, vous devez faire apparaître clairement au public les conditions contractuelles de sa mise à disposition. La meilleure manière de les indiquer est un lien vers cette page web.

Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits sur cette œuvre.

Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.

Le texte complet de la licence est disponible à cette adresse: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode

96 / 275 http://www.bull-formation.com

Page 97: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Druid

• Adresse: http://druid.sourceforge.net/

• Version: 3.12

• Licence: GPL

• Notes : Java nécessaire

2.1 Fonctionnalités (1/2)• Gestion de la documentation

• Import XML schema

• Import d'une base de données existante

• Assistant de création de base de données avec des modèles

La gestion de la documentation comprend la gestion des versions, des notes et de la documentation sur chacun des objets.

L'assistant permet d'utiliser des modèles pour InterBase, MySQL, PostgreSQL et Oracle.

2.2 Fonctionnalités (2/2)• Création de tables, vues, fonctions, procédures, séquences

• Gestion des types de données

• Ajout de champs dans les tables

• Gestion des triggers sur les tables

• Génération de scripts SQL, de classes Java, C++, PHP

• Connexion jdbc

• Vue du schéma sous forme graphique (E/R views)

Cet outil permet aussi de gérer les clé primaires et étrangères, les types et les

97 / 275 http://www.bull-formation.com

Page 98: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

contraintes d'intégrité.

Il peut en plus manipuler le schéma au sein même de la base de données.

2.3 Documentation de la base de données• Description des révisions

• Notes

• Documentation de chaque objet

Druid permet :

• d'ajouter une description des révisions dans l'onglet révision de la description de la base de données

• d'ajouter des notes de type danger, alert et info

• de documenter chacun des objets dans l'onglet Docs des propriétés de chacun des objets

2.4 Création d'une base• Assistant de création de la base

• Ajout d'objets : simple et intuitif

Druid propose un assistant pour créer des bases de données. Cet assistant permet de créer les types de données par défaut selon le type de base de données choisi (Interbase, MySQL, PostgreSQL, Oracle).

Une fois l'objet base de données créé, il est possible d'ajouter à cette base de données des tables, des vues, des procédures, des fonctions et des séquences.

Pour ajouter une base de données, faire un clic droit dans la partie gauche de la fenêtre et choisir Add Database….

98 / 275 http://www.bull-formation.com

Page 99: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.5 Création d'objets de base de donnéesAjout d'objets :

• des tables

• des vues

• des fonctions

• des procédures

• des séquences

Pour ajouter un des objets ci-dessus, cliquer avec le bouton droit sur l'étiquette de la base de données et choisir l'objet à ajouter.

Il est possible d'ordonner les objets dans des conteneurs virtuels appelés folders. On peut imaginer une organisation en modules fonctionnels. On peut déplacer les objets dans les conteneurs par simple glisser/déposer.

Ces folders sont aussi utilisés pour créer des sections différentes lors de la génération de la documentation.

2.6 Modification d'objets de base de données• Modification / Renommage / suppression

• Panneau de propriétés

• Possibilité de dupliquer un objet

Pour modifier un objet, il suffit de le sélectionner et ses propriétés s'affichent dans la partie de droite.

Pour renommer un objet, il faut double-cliquer sur l'étiquette de l'objet dans l'arbre de la base de données.

Pour supprimer un objet, il faut effectuer un clic droit sur l'étiquette de l'objet dans l'arbre de la base de données puis sélectionner Remove.

Il est possible de dupliquer un objet grâce aux fonctions copy et paste disponibles pour chacun des objets.

99 / 275 http://www.bull-formation.com

Page 100: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.7 Types de données• Créer de nouveaux Data Types

• Définir des alias

L'assistant de création de base de données utilise des templates de création pour engendrer les types de données de base pour le moteur de base de données utilisé.

Il est possible d'en ajouter ou d'en supprimer en utilisant l'onglet Data Types dans les propriétés de la base de données.

Il est également possible d'ajouter des alias sur chacun des types de données de référence afin d'y ajouter des règles de vérification (*lower case*, *upper case*, *range of values*, *set of values*). Ces alias seront traduits en règles CHECK lors de la génération du code SQL.

2.8 Gestion des tablesPour chaque table, on peut gérer :

• les colonnes

• les triggers

• les contraintes

Utiliser l'onglet Fields dans la fenêtre de propriétés pour gérer les colonnes.

Pour choisir le type d'une colonne, cliquer sur la case correspondant au type de la colonne à modifier, puis sélectionner le type à utiliser dans la liste des types disponibles avec un clic droit et enfin sélectionner Choose this datatype.

Il est possible d'utiliser un champ d'une autre table en tant que type. Ceci aura pour effet de créer une contrainte de clé étrangère. Druid propose alors des options d'action sur update et delete ainsi que des options de Match (Full, partial ou simple).

Utiliser l'onglet Triggers dans la fenêtre de propriétés pour gérer les déclencheurs.

Utiliser l'onglet Rules dans la fenêtre de propriétés pour gérer les contraintes.

100 / 275 http://www.bull-formation.com

Page 101: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.9 Modification d'une table

2.10 GénérationDruid permet d'engendrer :

• un dictionnaire des tables et des champs au format ASCII

• de la documentation au format PDF, XHTML et XML docbook

• un résumé de l'ensemble des tables au format ASCII, HTML, XML, CSV

• des classes Java, PHP, C, C++

• du code SQL qui permet de créer les objets dans la base de donnée

La production de documentation, de scripts ou de code source est obtenue dans l'onglet génération des propriétés de la base de données.

Pour activer la production d'items, il faut charger pour chacun des modules principaux, les sous-modules à utiliser en faisant un clic droit sur le module, puis en sélectionnant Add Module.

101 / 275 http://www.bull-formation.com

Page 102: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

La génération s'obtient en utilisant le clic droit sur l'objet à engendrer, puis en sélectionnant Generate.

La génération des items de tous les modules configurés peut être activée en utilisant la fonction Generate sur le noeud principal DATA GENERATION.

2.11 Production de code

2.12 Vue entités/relations• Vue E/R

• Solution simple pour rétro-conception

Druid offre la possibilité de créer des vues entités/relations à partir des tables définies pour la base de données.

Pour ajouter une vue E/R, utiliser l'onglet *E/R Views* dans les propriétés de la base de données, puis faire un clic droit dans la partie de gauche, et enfin sélectionner Add E/R view.

102 / 275 http://www.bull-formation.com

Page 103: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Ensuite ajouter les entités et les relations une à une par clic droit dans la partie de droite et sélectionner Add Entity. Il est possible d'ajouter les tables une à une pour avoir une vue détaillée ou de les grouper si l'on veut représenter les interactions par modules.

2.13 Vue entités/relations

103 / 275 http://www.bull-formation.com

Page 104: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3 PgAdmin III

• Adresse: http://www.pgadmin.org

• Version: 1.14.0

• Licence: PostgreSQL

• Notes: Multiplateforme, multilangue

3.1 Présentation générale

104 / 275 http://www.bull-formation.com

Page 105: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.2 Installation• Installeur Windows et Mac

• Paquets RPM et Debian/Ubuntu

Installer le paquet debian est assez simple :

$ aptitude install pgadmin3

Il existe un Admin Pack au sein de PostgreSQL pour faciliter l'utilisation de PostgreSQL :

$ psql -f /usr/share/postgresql/8.x/contrib/admin8x.sql postgres

Il est disponible dans les modules contrib de PostgreSQL.

3.3 Fonctionnalités (1/2)• Connexion possible sur plusieurs serveurs

• Édition des fichiers de configuration locaux

• Permet de gérer toutes les bases d'un même serveur

• Maintenance des bases de données (vacuum, analyze, reindex)

• Visualisation des verrous

• Visualisation des journaux applicatifs

• Débogueur PL/pgsql

3.4 Fonctionnalités (2/2)• Sauvegarde et restauration d'une base

• Gestion des rôles

• Création/modification/suppression de tous les objets PostgreSQL

• Possibilité de voir/cacher les objets systèmes

• Éditeur de requête

105 / 275 http://www.bull-formation.com

Page 106: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Les objets gérables par pgAdmin sont :

• la base

• les tables, les vues et les séquences

• les rôles, les types et les fonctions

• les tablespaces

• les agrégats

• les conversions

• les domaines

• les triggers et les procédures stockées

• les opérateurs, les classes et les familles d'opérateur

• les schémas

3.5 Connexion• Plusieurs connexions vers plusieurs serveurs

• Attention à couper pgAdmin, quand vous relancez le serveur !

Il est possible d'établir plusieurs connexions différentes en spécifiant pour chacune d'elles :

• l'adresse du serveur ;

• une description pour la connexion ;

• le port du serveur PostgreSQL ;

• le nom de la base de maintenance ;

• le nom et le mot de passe du super-utilisateur.

Pour ajouter une nouvelle connexion, utiliser le menu Fichier/Ajouter un serveur.

3.6 Édition des fichiers de configuration• éditer les fichiers locaux

• éditer les fichiers distants ( Admin Pack )

pgAdmin permet d'éditer les fichiers de configuration postgresql.conf,

106 / 275 http://www.bull-formation.com

Page 107: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

pg_hba.conf et pgpass . pgAdmin charge les fichiers de configuration et offre une fenêtre de modification conviviale.

Cette fonctionnalité est accessible via le menu Fichiers/Ouvrir postgresql.conf et Fichiers/Ouvrir pg_hba.conf pour un fichier local.

Pour les fichiers distants, vous pouvez les ouvrir à partir du menu Outils/Configuration du serveur (si vous avez installé le module contrib Adminpack).

3.7 Tâches de maintenance• Gestion des VACUUMs

• Fenêtre de maintenance ( REINDEX, CLUSTER )

Il est possible d'effectuer les tâches de maintenance suivantes sur chacune des tables ou des bases de données :

• VACUUM (avec les options full, freeze et/ou analyze) ;

• ANALYZE ;

• REINDEX (avec les options force et/ou recreate).

Pour utiliser cette fonctionnalité, utiliser un clic droit sur l'objet à manipuler puis choisir maintenance.

3.8 Maintenance

107 / 275 http://www.bull-formation.com

Page 108: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.9 Visualisation des verrous• Afficher la liste de verrous (locks)

• Visualiser les requêtes en attente

pgAdmin permet de visualiser les verrous actifs sur les bases de données. Cette fonctionnalité est accessible depuis le menu *Outils / État du serveur* dans l'onglet Verrous.

Pour pouvoir visualiser le texte des requêtes, la directive stats_command_string doit être positionnée à on dans le fichier postgresql.conf.

3.10 Fenêtre des verrous

108 / 275 http://www.bull-formation.com

Page 109: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.11 Sauvegarde• Sauvegarder une base, un schéma, une table

• 3 formats différents

• Multiples options

Cette fonctionnalité s'appuie sur l'outil pg_dump et propose les options suivantes :

• format plain, tar et custom

• sauvegarde des Blobs

• inclusion des OID dans la sauvegarde

• enregistrement des données sous forme d'ordre INSERT

• désactiver les guillements '$' pour le corps des fonctions

Pour les sauvegardes au format plain, il est possible d'activer les options suivantes :

• sauvegarder uniquement les données

• sauvegarder uniquement le schéma

• ne pas enregistrer le propriétaire des données

• inclure l'ordre de création de la base de données en début de sauvegarde

• inclure l'ordre de suppression des données avant les ordres de création

• désactiver les déclencheurs

Attention : pour restaurer les données avec pgAdmin les données doivent être sauvegardées au format tar ou custom.

3.12 Restauration• interface de restauration

• format tar ou custom uniquement

pgAdmin permet de restaurer une table ou une base à partir d'un fichier de sauvegarde au format tar ou custom. Cette fonctionnalité s'appuie sur l'outil pg_restore et propose les options suivantes :

• restaurer les données uniquement

109 / 275 http://www.bull-formation.com

Page 110: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• restaurer le schéma uniquement

• ne pas restaurer le propriétaire des données (l'utilisateur restaurant les

données en devient propriétaire)

• désactiver les déclencheurs

Pour utiliser cette fonctionnalité, faire un clic droit sur l'objet à restaurer et sélectionner Restauration.

Dans la fenêtre de restauration, choisir le fichier contenant la sauvegarde des données et les options, puis valider.

3.13 Gestion des rôles• Gestion de utilisateurs

• Gestion des groupes

• ROLE = USER et/ou GROUP

pgAdmin permet de gérer les rôles de groupes et d'utilisateurs. L'interface permet d'ajouter, de modifier et de supprimer les rôles. Pour chacun des rôles, il est possible de spécifier :

• un ou plusieurs rôles d'appartenance

• des variables

• un mot de passe de connexion

• une date d'expiration pour le rôle

• si le rôle hérite des droits des rôles parents

• si le rôle est super-utilisateur

• si le rôle peut créer des bases de données

• si le rôle peut créer des rôles

L'ajout de rôle est accessible via l'interface avec un clic droit sur le noeud Rôles groupe ou Rôles de connexion dans l'arbre du cluster de base de données.

Pour modifier un rôle, utiliser le clic droit sur le rôle choisi, puis choisir Propriétés.

Pour supprimer un rôle, utiliser le clic droit sur le rôle choisi, puis choisir Supprimer.

110 / 275 http://www.bull-formation.com

Page 111: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.14 Gestion des tables• Gestion des tables

• Gestions des droits et des attributs

• Paramétrage des opérations de maintenance

pgAdmin permet d'effectuer sur chacune des tables les opérations suivantes :

• afficher les données (avec la possibilité de filtrer les données)

• supprimer des tables en cascade

• définir les paramètres d'autovacuum

• définir les droits

• définir des contraintes (clé primaire, clé étrangère, unique, check)

• ajouter/modifier/supprimer des colonnes

3.15 Affichage des données

111 / 275 http://www.bull-formation.com

Page 112: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.16 Gestion des objets• Click droit sur l'objet

• Attention aux objets cachés !

De manière générale, la gestion des objets s'effectue de la manière suivante :

• clic droit sur l'objet générique pour procéder à l'ajout d'un objet ou accéder au gestionnaire de droits pour le type d'objet sélectionné ;

• clic droit sur un objet particulier pour le modifier, le supprimer, ajouter un objet de même type, ajouter un sous-objet ou accéder au gestionnaire de droits sur cet objet.

Les objets gérés par pgAdmin sont : conversion, langage, schéma, agrégat, conversion, domaine, fonction, trigger, procédure, opérateur, classe d'opérateurs, famille d'opérateurs, séquence, table, index, colonne, contrainte, règle, vue, type.

Pour n'afficher que les objets utilisateurs et masquer les objets systèmes, désactiver l'option Objets systèmes du menu Affichage.

Attention, ceci ne sera effectif qu'après reconnexion.

3.17 Éditeur de requêtesUn éditeur de requête permet de :

• lire/écrire un fichier de requêtes ;

• exécuter une requête ;

• sauvegarder le résultat d'une requête dans un fichier ;

• exécuter un EXPLAIN (avec les options verbose et analyze) sur une requête.

L'éditeur de requête est accessible depuis le menu *Outil/Éditeur de requêtes* ou depuis un icône de la barre d'outils.

112 / 275 http://www.bull-formation.com

Page 113: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.18 Fenêtre de l'éditeur de requêtes

113 / 275 http://www.bull-formation.com

Page 114: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4 pgAgent

• Programmer des opérations régulières

• Utile pour Windows

• Sous Linux, cron est préférable

pgAgent est un agent utilisé pour planifier l'exécution de tâches pour PostgreSQL. Il est capable d'exécuter des scripts shell ou des tâches SQL avec des planifications complexes.

pgAgent a été introduit avec pgAdmin 1.4.

4.1 Installation de pgAgent• Inclus dans l'installateur Windows

• paquets RPM et Debian/Ubuntu disponibles

Voici un exemple d'installation du paquet pgAgent sous Debian. Ne pas oublier de vérifier que le langage plpgsql est installé pour la base postgres, puis exécuter le script /usr/share/pgadmin3/pgagent.sql

$ apt-get install pgagent $ createlang plpgsql postgres $ psql postgres < /usr/share/pgadmin3/pgagent.sql

Il est également possible de l'exécuter le script à partir de pgAdmin. Pour cela, sélectionner la base postgres, puis ouvrir l'éditeur de requêtes (menu

"Outils -> Éditeur de requêtes") et sélectionner le fichier.

4.2 jobs• Chaque tache est représenté par un “job”

• Définir la périodicité et les actions

• pgAdmin garde la trace des résultats obtenus

114 / 275 http://www.bull-formation.com

Page 115: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

pgAgent exécute des tâches planifiées appelées jobs. Chaque job consiste en l'exécution de steps ou (pas en français) à des dates choisies.

Un noeud jobs est présent dans pgAdmin pour permettre la configuration des tâches pour pgAgent. Un job peut comporter un ou plusieurs pas et également une ou plusieurs planifications.

pgAdmin affiche le résultat de la dernière exécution des jobs ainsi que la date du prochain déclenchement.

4.3 Planifier une tache de maintenance

4.4 Étapes• une série de commande SQL

• un fichier batch

Une step (ou étape) est la définition d'une action à faire pour pgagent. Cela peut être

115 / 275 http://www.bull-formation.com

Page 116: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

une série de commandes SQL ou bien un fichier batch.

Pour chaque étape, il faut définir le nom de la base de données sur laquelle il s'applique.

Afin de contrôler le résultat de sortie d'un job, il peut être plus intéressant de mettre des commandes SQL dans un fichier à exécuter plutôt que d'exécuter directement des ordres SQL depuis un job.

4.5 Définir une étape

4.6 Planification• Périodicité simple…

• … ou planification évoluée

• Exceptions

116 / 275 http://www.bull-formation.com

Page 117: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

pgAgent permet d'utiliser des planifications complexes pour l'exécution des jobs.

Il est possible de déterminer une plage temporelle de validité d'une planification.

On peut définir une périodicité pour une planification selon :

• les jours de la semaines (dimanche .. samedi) ;

• les jours du mois (1er, 2ème .. 31ème) ;

• les mois de l'année (janvier .. décembre) ;

• un ou plusieurs temps (heure + minutes)

On peut également spécifier des exceptions pour lesquelles les jobs ne seront pas exécutés.

4.7 Ecran de planification

117 / 275 http://www.bull-formation.com

Page 118: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5 phpPgAdmin

• Adresse: http://phppgadmin.sourceforge.net/

• Version: 5.0.2

• Licence: GNU Public License

• Notes: Multiplateforme

5.1 phpPgAdmin : présentation générale

phpPgAdmin - Présentation générale

phpPgAdmin se compose de deux volets:

118 / 275 http://www.bull-formation.com

Page 119: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• une arborescence sur la gauche permettant de naviguer parmi les objets des serveurs et de leur bases de données

• la page principale à droite affichant les détails de l'objet voulu ou de l'action réalisée

5.2 phpPgAdmin : Fonctionnalités 1/2• Application web déportée

• Création, maintenance de bases de données

• Import et export de données

• Exécution de commandes SQL et de scripts (upload)

• Gestion des tablespaces

• Gestion des utilisateurs et des droits

• Gestion des connexions

• Support multi-lingue (31 langues supportés)

• Support des différentes opérations de maintenance

phpPgAdmin a certains avantages:

• capable gérer un nombre illimité de serveurs PostgreSQL

• permet sur les serveurs PostgreSQL de ne n'ouvrir l'accès qu'à une seule machine dans le fichier pg_hba.conf, plutôt qu'à chacun des postes DBA

• centralise l'installation et la configuration des accès vers les serveurs en un seul point plutôt que de multiplier ceux-ci sur tous les postes DBA

119 / 275 http://www.bull-formation.com

Page 120: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.3 phpPgAdmin : Fonctionnalités 2/2• Gestion des tables, vues, index, séquences

• Gestion des contraintes, fonctions, triggers, règles,

• Gestions des types, agrégats, domaines

• Visualisation des verrous

• Visualisation des opérateurs, classes d'opérateurs et conversions entre encodages

• Visualisation des languages et conversions de type

• Configuration de l'autovacuum

• Configuration de la recherche plein texte

120 / 275 http://www.bull-formation.com

Page 121: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.4 Arborescence - Aperçus

phpPgAdmin - Arborescence - Aperçus

5.4.1 DétailsLe volet de gauche de phpPgAdmin présente les différents serveurs accessibles depuis l'instance configurée.

Pour chaque serveur, l'arborescence inclut chaque base ainsi que leurs objets.

121 / 275 http://www.bull-formation.com

Page 122: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.4.2 Groupes de serveursphpPgAdmin permet de regrouper les différents serveurs PostgreSQL qui y sont configurés en groupe logique.

Sue la capture d'écran présentée ici, l'administrateur a décidé de regrouper ses serveurs en fonction de la branche à laquelle ils appartiennent, soit trois groupes distincts:

• “branche 7.x”

• “branche 8.x”

• “branche 9.x”

Voici l'extrait du fichier “conf/config.inc.php” qui permet cette configuration:

// Groups allow administrators to logicaly group servers together under group nodes in the left browser tree$conf['srv_groups'][0]['desc'] = "branche 7.x";$conf['srv_groups'][0]['servers'] = '0';$conf['srv_groups'][1]['desc'] = 'branche 8.x';$conf['srv_groups'][1]['servers'] = '1,2,3,4,5';$conf['srv_groups'][2]['desc'] = 'branche 9.x';$conf['srv_groups'][2]['servers'] = '6,7';

Ce qui peut-être aussi écrit de cette façon:

$conf['srv_groups'] = array( array( 'desc' => 'branche 7.x', 'servers' => '0' ), array( 'desc' => 'branche 8.x', 'servers' => '1,2,3,4,5' ), array( 'desc' => 'branche 9.x', 'servers' => '6,7' ));

Le nœud nommé “Tous les serveurs” regroupe l'ensemble des serveurs présents dans la configuration de phpPgAdmin.

122 / 275 http://www.bull-formation.com

Page 123: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.5 Arborescence - Tables, vues, séquences et fonctions

phpPgAdmin - Arborescence - Tables, vues, séquences et fonctions

Le volet de gauche permet de naviguer rapidement dans les objets des bases de données. Ainsi, il est possible de lister et d'accéder aux tables, vues, séquences et fonctions d'un schéma très rapidement.

123 / 275 http://www.bull-formation.com

Page 124: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.6 Arborescence - Détails table

phpPgAdmin - Arborescence - Détails table

L'arborescence permet aussi d'accéder rapidement à l'ensemble des propriétés des tables.

Cliquer sur les labels mène à la page de propriété de l'objet désiré. Notez cependant que certaines icônes ont un lien différent de celui de leur label:

• l'icône à gauche du nom d'une table permet de parcourir directement les données de la table

• l'icône à gauche du nom d'une colonne permet de visualiser chacune des valeurs présentes dans la table ainsi que leur nombre d'occurrence

Sur la capture d'écran ici présentée, les nœuds dont le label est en noir ne sont cependant pas cliquables car ces éléments n'ont pas de page spécifique.

124 / 275 http://www.bull-formation.com

Page 125: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.7 Arborescence - Détails vue

phpPgAdmin - Arborescence - Détails vue

Comme pour les tables, l'arborescence permet de visualiser et accéder rapidement aux détails des vues.

Ici aussi, cliquer sur l'icône d'une vue ou d'une de ces colonnes permet de naviguer dans les données de cette vue ou de sa colonne.

125 / 275 http://www.bull-formation.com

Page 126: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.8 Exécuter des requêtes

phpPgAdmin - Exécution de requêtes SQL

L'exécution de requêtes SQL depuis phpPgAdmin se fait depuis l'onglet “SQL” accessible au niveau de chaque base de données ou d'un de leurs schémas.

Il existe deux méthodes pour exécuter ces requêtes SQL :

• l'exécution directe en ligne en remplissant le formulaire

• l'exécution d'un script SQL en choisissant un fichier SQL depuis votre disque dur local

126 / 275 http://www.bull-formation.com

Page 127: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.9 Historique des requêtes

phpPgAdmin - Fenêtre d'historique

phpPgAdmin permet de conserver un historique des requêtes exécutées par l'utilisateur lors de la session courante. Cet historique n'est pas conservé entre deux sessions.

Il est possible d'accéder à cet historique à travers le lien “Historique” en haut à droite de la page principale. La fenêtre associée présente alors la liste de requête, en fonction de la base de données sélectionnée. De plus, elle permet alors au choix de :

• supprimer des requêtes de cet historique

• vider l'historique

• ré-exécuter des requêtes

Seules les requêtes exécutées directement en ligne sont conservée dans l'historique, celles exécutées depuis un script SQL ne sont pas conservées.

127 / 275 http://www.bull-formation.com

Page 128: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.10 Recherche

phpPgAdmin - Recherche

phpPgAdmin permet de rechercher des objets au sein d'une base de données. Cette fonctionnalité est accessible depuis l'onglet “Rechercher” disponible au niveau de chaque base de données.

Il est possible de cliquer indépendamment sur chaque nom d'objet pour chacune des occurrences trouvées. Par exemple, pour chaque colonne trouvée, nous aurons trois liens: le schéma, la table et la colonne, chaque lien menant à la page de propriété associée à l'objet.

La recherche parcourt tous les objets de la base: schémas, tables, vues, colonnes, contraintes, index, séquences, fonctions, triggers, règles, types, domaines, opérateurs, classes d'opérateur, conversions, langages, et agrégats.

128 / 275 http://www.bull-formation.com

Page 129: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.11 Processus en cours

phpPgAdmin - Liste des processus en cours

L'onglet “processus” accessible au niveau de chacune des bases de données permet de visualiser les processus connectés à la base de données courante. Chaque processus correspond à une connexion à la base de donnée.

Nous y trouvons l'utilisateur utilisé pour la connexion, son activité et à quel moment à été exécutée la requête courante. De plus, si votre utilisateur de connexion en a le droit, cette page vous permet d'interrompre une requête, voire même de forcer la déconnexion d'une session, respectivement à l'aide des actions “Annuler” et “Tuer”.

Si votre navigateur supporte les requêtes asynchrones en javascript (aussi nommé ajax), les données sur les sessions sont alors rafraîchies automatiquement toutes les trois secondes. Il est possible d'arrêter ce comportement en cliquant sur “Arrêter”.

129 / 275 http://www.bull-formation.com

Page 130: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.12 Visualisation des verrous

phpPgAdmin - Visualisation des verrous

L'onglet “Verrous” accessible au niveau de chacune des bases de données permet de visualiser tous les verrous présents sur la base de données courante.

Ici aussi, si votre navigateur supporte les requêtes ajax, les données sont alors rafraîchies toutes les 3 secondes. Tout comme pour la page des processus, il est possible d'arrêter ce comportement en cliquant sur “Arrêter”.

130 / 275 http://www.bull-formation.com

Page 131: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.13 Tâche de maintenance 1/3

phpPgAdmin - Maintenance base de données

phpPgAdmin permet d'exécuter les différentes tâches de maintenances pour toute une base, un ensemble de tables ou une table en particulier. Ce slide présente les opérations sur une base entière

Les quatre tâches de maintenance courante sont disponibles: VACUUM, ANALYZE, CLUSTER et REINDEX.

Ici, elles s'exécuteront toutes sur toutes les tables présentes dans la base de données courante.

La partie “Autovacuum” permet de visualiser le paramétrage spécifique de ce mécanisme par table. Dans l'exemple présenté ici, l'autovacuum a été désactivé pour la table “region”. Le paramètre modifié apparaît alors en rouge.

Il est ici possible d'éditer ou supprimer les configurations existantes de l'autovacuum pour chaque table, mais pas d'en rajouter.

131 / 275 http://www.bull-formation.com

Page 132: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.14 Tâche de maintenance 2/3Exécution des tâches de maintenances pour un ensemble de tables :

phpPgAdmin - Maintenance d'un ensemble de tables

Il est possible d'exécuter une tâche de maintenance sur plusieurs tables d'un même schéma depuis l'onglet “Tables” des propriétés du schéma.

Cochez les différentes tables voulues, sélectionnez l'opération de maintenance voulue en dessous du tableau, cliquez sur “Lancer”. Une page de confirmation vous permettra de valider la liste des tables une dernière fois avant d'exécuter l'opération.

Nous avons ici aussi un accès direct aux opérations de VACUUM, ANALYZE, REINDEX pour chacune des tables en particulier.

132 / 275 http://www.bull-formation.com

Page 133: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.15 Tâche de maintenance 3/3Tâches de maintenances pour une table :

phpPgAdmin - Maintenance d'une table

L'onglet “Admin” accessible au niveau de chaque table permet d'accéder à une page équivalente à celle proposée pour les bases de données, mais concernant cette fois-ci uniquement la table sélectionnée.

Ainsi, il sera ici aussi possible d'exécuter les tâches de VACUUM, ANALYZE, CLUSTER et REINDEX sur la table voulue. Notez que CLUSTER ne sera ici accessible que si un index a été défini au préalable pour cette opération.

L'ajout d'une configuration d'autovacuum spécifique à la table est disponible ici si aucune n'est déjà définie. Si la configuration existe, il est alors possible de l'éditer ou de la supprimer.

133 / 275 http://www.bull-formation.com

Page 134: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.16 Définition d'une table

phpPgAdmin - Définition d'une table

Cette page présente la définition d'une table. Nous y retrouvons ses colonnes, leurs types et contraintes. De plus, elle nous permet d'ajouter ou supprimer des colonnes, vider la table, insérer de nouvelles lignes ou d'effectuer une recherche sur la table.

Pour chacune des colonnes nous avons la possibilité de l'éditer, la supprimer, d'en modifier les droits (à partir de PostgreSQL 8.4), d'en parcourir les données. Notez qu'il est possible de consulter la définition des contraintes au survol des icônes associées avec la souris.

134 / 275 http://www.bull-formation.com

Page 135: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.17 Information sur les tables

phpPgAdmin - Statistiques sur les tables

phpPgAdmin est capable de vous présenter quelques informations sur les statistiques d'utilisation de la table ainsi que la liste des tables qui en héritent.

135 / 275 http://www.bull-formation.com

Page 136: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6 Conclusion

• Cette présentation n'est pas exhaustive !

• Il existe d'autres produits équivalents.

6.1 Bibliographie• Tour graphique de pgAdmin 1.14

• Tour graphique de pgAdmin 1.12

« Tour graphique de pgAdmin 1.14 ». Guillaume Lelarge, 2011 http://www.pgadmin.org/visualtour14.php

« Tour graphique de pgAdmin 1.12 ». Guillaume Lelarge, 2010 http://www.pgadmin.org/visualtour12.php

Iconographie :

La photo initiale est disponible sous licence CC-BY-SA : http://www.flickr.com/photos/maggie-me/4581163646/

6.2 QuestionsN'hésitez pas, c'est le moment !

136 / 275 http://www.bull-formation.com

Page 137: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Travaux pratiques

137 / 275 http://www.bull-formation.com

Page 138: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Énoncés

1.1 pgAdminLe but de ce TP est d'utiliser pgAdmin pour effectuer les tâches courantes sur une base PostgreSQL.

• Exécuter pgadmin3 avec l'utilisateur postgres.

• Créer une connexion sur le serveur PostgreSQL local.

• Positionner le paramètre work_mem du fichier postgresql.conf à 10MB à l'aide de pgAdmin.

• Re-démarrer postgreSQL.

• Se connecter sur la base *tp_druid* et lancer un VACUUM FULL ANALYZE sur la base *tp_druid*.

• planifier un vacuum de la base tous les lundis à 2h30. Vérifier que la prochaine exécution de du vacuum de la base est bien prévue pour le lundi suivant à 2h30.

• Afficher toutes les données du jour dans la table *vente* en utilisant un filtre sur les données de la table *vente*.

• Afficher les données de la vue *achat_du_jour*.

• Sauvegarder la base *tp_druid* au format *COMPRESS* dans un fichier /var/backups/pgsql/base_tp_druid.dump.

• Supprimer la base de données *tp_druid*.

Attention de rafraîchir la liste des bases de données afin de fermer les connexions actives de pgadmin sur les bases de données avant de supprimer la base de données.

• Créer une nouvelle base *tp_druid*.

• Restaurer la sauvegarde.

• Ré-indexer manuellement la base de données *tp_druid*.

• Ajouter un rôle groupe “lecture” et un utilisateur “lecteur”, appartenant au rôle “lecture” (qui hérite des droits du rôle lecture).

• Donner les droits en lecture sur les tables de la base de données tp_druid au rôle “lecture”.

• Se connecter à la base de données avec l'outil psql avec l'utilisateur lecteur et vérifier que cet utilisateur peut accéder en lecture aux tables de la base *tp_druid* mais qu'il ne peut pas y accéder en écriture.

138 / 275 http://www.bull-formation.com

Page 139: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Ajouter une nouvelle table temporaire *tmp* qui contient un champ id de type serial et un champ libelle de type text non nul.

• Ajouter une contrainte de clé primaire pk_tmp_id sur le champ id de la table *tmp*;

• Ajouter un index idx_tmp_libelle de type btree sur le champ libelle de la table *tmp*.

• Ajouter une colonne libelle_court de type text à la table *tmp*.

• Écrire une fonction rempli_libelle_court qui rempli le champs libelle_court avec les 10 premiers caractères du champ libelle. Cette fonction sera appelé par le déclencheur trigger_tmp_libelle_court qui sera exécuté avant insertion ou mise à jour de la table *tmp*.

• A l'aide de l'éditeur de requête, ajouter l'élément ayant pour libelle “Test d'insertion dans la table temporaire” dans la table *tmp*. Vérifier que l'élément est inséré correctement en utilisant la fonction de visualisation des données sur la table *tmp*, et que le déclencheur a rempli la colonne libelle_court correctement.

• Effacer les éléments de la table *tmp* à l'aide de l'éditeur de requête et ré-initialiser la séquence tmp_id_seq à 1.

• Insérer l'élément ayant pour libelle “Test d'insertion dans la table temporaire numéro 2” dans la table *tmp* et vérifier que l'id de cet élément est bien 1.

• Supprimer la table temporaire ainsi que tous les objets s'y rapportant.

1.2 DruidDans ce TP, nous allons construire une petite base de données nommée tp_druid à l'aide de l'outil Druid.

Cette base de données est découpée fonctionnellement en 3 modules fonctionnels, *base_interne*, *achat* et *vente*.

On ajoutera un alias au type varchar pour avoir un type code_article qui est une chaîne de caractère de 3 lettres majuscules.

On ajoutera un alias au type varchar pour avoir un type telephone qui est une chaîne de 10 caractères.

Le module *base_interne* comporte :

• une table *article* qui possède 2 champs :

• code de type code_article qui est la clé de la table article.

• designation de type text qui est un libellé libre ;

Le module *achat* comporte :

• une table *fournisseur* qui possède les champs suivants :

• id de type serial qui est la clé primaire de la table ;

• nom de type text est un champs obligatoirement non null;

• adresse de type text ;

139 / 275 http://www.bull-formation.com

Page 140: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• telephone de type text qui est une chaîne de 10 caractères.

• une table *article_fournisseur* qui est une table de relation entre la table *article* et la table *fournisseur*. Cette table contient le nombre d'articles commandés à une date donnée chez un fournisseur. Cette table comporte les champs suivants :

• article_code : référence vers le code de l'article ;

• fournisseur_id : référence vers l'id du fournisseur ;

• date_commande : date de la commande ;

• nombre : nombre d'articles commandés.

Les 3 premiers champs de la table *article_fournisseur* forment la clé primaire. La table *article_fournisseur* doit être mise à jour lorsqu'un article ou un fournisseur est supprimé pour ne pas avoir de référence cassée.

• une vue *commande_du_jour* qui montre tous les articles commandés pour le jour courant.

• une fonction *commande_articles_du_jour* qui renvoie le nombre d'articles commandés pour le jour courant.

Le module *vente* comporte :

• une table *client* qui possède les champs suivants :

• id de type serial qui est la clé primaire de la table ;

• nom de type text est un champs obligatoirement non null;

• adresse de type text ;

• telephone de type text qui est une chaîne de 10 caractères.

• une table *vente* qui est une table de relation entre la table *article* et la table *client*. Cette table contient le nombre d'articles vendus à une date donnée à un client. Cette table comporte les champs suivants :

• article_code : référence vers le code de l'article ;

• client_id : référence vers l'id du client ;

• date_achat : date de l'achat ;

• nombre : nombre d'articles achetés.

Les 3 premiers champs de la table *vente* forment la clé primaire. La table *vente* doit être mise à jour lorsqu'un article ou un client est supprimé pour ne pas avoir de référence cassée.

• une vue *achat_du_jour* qui montre toutes les ventes pour le jour courant.

Questions

* Créer la base de données tp_druid dans Druid à partir du template PostgreSQL.

* Créer les éléments du module *base interne* et du module *achat*.

140 / 275 http://www.bull-formation.com

Page 141: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

* Créer les éléments du module *vente* par copie des éléments du module *achat*.

* Créer la vue E/R “Vue de la base tp_druid” qui montre les relations entre toutes les tables de la base de données.

* Ajouter le module *PostgreSQL* au module *Sql script* pour la génération des scripts SQL, puis générer le code SQL.

* Ajouter le module *PDF Format* au module *Docs* pour la génération de la documentation, puis générer la documentation au format PDF.

* Ajouter le module Java au module Code pour la génération des classes Java, puis après avoir configuré le nom du package (ex: tp_druid) générer le code Java.

* A l'aide de l'outil createdb, créer une base tp_druid vide et y ajouter le langage plpgsql.

* A l'aide de psql, exécuter le code SQL généré, puis insérer un article, un fournisseur, un client, une commande d'article pour le jour courant, une vente d'article pour le jour courant. Vérifier que les vues et la fonction renvoient le résultat attendu.

141 / 275 http://www.bull-formation.com

Page 142: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Solutions

2.1 pgAdminCorps de la fonction rempli_libelle_court :

BEGIN NEW.libelle_court := substring (NEW.libelle FROM 1 FOR 10);END;

2.2 DruidInsertion des données :

insert into article (code, designation) values ('PGD', 'PostgreSQL documentation');insert into fournisseur (nom) values ('mon_fournisseur');insert into client (nom) values ('mon_client');insert into article_fournisseur (article_code, fournisseur_id, date_commande, nombre) values ('PGD', 1, now() - interval '1 d', 3); insert into article_fournisseur (article_code, fournisseur_id, date_commande, nombre) values ('PGD', 1, now(), 2); insert into vente (article_code, client_id, date_achat, nombre) values ('PGD', 1, now() - interval '1 d', 1); insert into vente (article_code, client_id, date_achat, nombre) values ('PGD', 1, now(), 1);

Interrogation de la base de données :

select * from article;select * from fournisseur;select * from client;select * from article_fournisseur;select * from vente;select * from commande_du_jour;select * from achat_du_jour;select * from commande_articles_du_jour();

142 / 275 http://www.bull-formation.com

Page 143: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Tâches courantes

143 / 275 http://www.bull-formation.com

Page 144: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Introduction

• Création/suppression d'une base

• Templates

• Rôles et utilisateurs

• Maintenance

• Indexation

1.1 Licence Creative Commons CC-BY-NC-SAVous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Cette formation (diapositives, manuels et travaux pratiques) est sous licence CC-BY-NC-SA.

Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'œuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'œuvre).

Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.

Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.

À chaque réutilisation ou distribution de cette création, vous devez faire apparaître

144 / 275 http://www.bull-formation.com

Page 145: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

clairement au public les conditions contractuelles de sa mise à disposition. La meilleure manière de les indiquer est un lien vers cette page web.

Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits sur cette œuvre.

Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.

Le texte complet de la licence est disponible à cette adresse: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode

145 / 275 http://www.bull-formation.com

Page 146: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Gestion des bases

• Création

• Suppression

• Configuration

• Modèle (ie. Template)

2.1 Création d'une base• SQL : CREATE DATABASE

• Outil système : createdb

Quand une nouvelle base de données est créée à l'intérieur du groupe, “template1” est généralement clonée. Cela signifie que tous les changements effectués sur “template1” sont propagés à toutes les bases de données créées ultérieurement. Du coup, il est déconseillé d'utiliser “template1” pour votre travail quotidien mais cette propriété, utilisée judicieusement, peut être utile.

L'outil système createdb se connecte à la base de données “postgres” et exécute la commande CREATE DATABASE, exactement comme ci-dessus. Appelée sans aucun argument, createdb crée une base de donnée portant le nom de l'utilisateur courant.

À partir de la version 8.4, il est possible d'indiquer les options LC_COLLATE (ordre de tri) et LC_CTYPE (jeu de caractères) pour chaque base de données créée.

2.2 Suppression d'une base• SQL : DROP DATABASE

• Outil système : dropdb

Supprimer une base de données supprime tous les objets qui étaient contenus dans la base. La destruction d'une base de données ne peut pas être annulée. Vous ne pouvez pas exécuter la commande DROP DATABASE en étant connecté à la base de données

146 / 275 http://www.bull-formation.com

Page 147: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

cible. Néanmoins, vous pouvez être connecté à une autre base de données, ceci incluant la base “template1”. “template1” pourrait être la seule option pour supprimer la dernière base utilisateur d'un groupe donné.

Contrairement à createdb, l'action par défaut n'est pas de supprimer la base possédant le nom de l'utilisateur en cours.

2.3 Configuration• ALTER DATABASE base SET param TO val;

• Attention, paramétrage spécifique non copié.

Il est possible de modifier à chaud un grand nombre de paramètres de la base, en utilisant la syntaxe suivante :

ALTER DATABASE base SET param TO val;

Les paramètres par base de données surchargent tous ceux reçus de la ligne de commande de postmaster ou du fichier de configuration, et sont aussi surchargés par ceux de l'utilisateur ; les deux sont surchargés par les options par session.

Cela sauvegarde le réglage (mais ne l'applique pas immédiatement). Lors des connexions ultérieures à cette base de données, tout se passe comme si la commande était exécutée juste avant de commencer la session. Notez que les utilisateurs peuvent cependant modifier ce réglage pendant la session ; il s'agit seulement d'un réglage par défaut. Pour annuler un tel réglage par défaut, utilisez :

ALTER DATABASE nom_base RESET nom_variable;

Si vous copiez une base de données dont certains paramètres ont été configurés spécifiquement pour cette base de données, ces paramètres ne sont pas appliqués à la nouvelle base de données.

2.4 Modèle de base (ie. Template)• Créer une base de données à partir de “template2” :

CREATE DATABASE nom_base TEMPLATE template2;

• par défaut, “template1” est utilisée

• Lancer un VACUUM FREEZE, après la création du template

147 / 275 http://www.bull-formation.com

Page 148: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Il est essentiel que la base de données source soit inactive (pas de transaction en écriture en cours) pendant toute la durée de l'opération de copie.

On peut par exemple décider que la base test doit être figée pour devenir un modèle :

UPDATE pg_databaseSET datistemplate=trueWHERE datname='test';

Ainsi, tout utilisateur doté du droite CREATEDB pourra la cloner. Sans cette option, seul un super-utilisateur ou le propriétaire de la base clonée peut en faire une copie.

La commande shell correspondante pour créer une base de données à partir d'un modèle est :

createdb -T test nom_base

CREATE DATABASE fonctionne en copiant une base de données préexistante. Par défaut, cette commande copie la base de données système standard “template1”. Ainsi, cette base de données est le « modèle » à partir duquel de nouvelles bases de données sont créées. Si vous y ajoutez des objets, ces objets seront copiés dans les bases de données utilisateur créées ultérieurement.

Par exemple, si vous installez le langage de procédures PL/pgSQL dans la base “template1”, celui-ci sera automatiquement disponible dans les bases de données utilisateur créées à partir de ce modèle.

Après avoir préparé ou modifié une base de données modèle, il est recommandé d'utiliser la commande VACUUM FREEZE dans cette base de données. Cela évite les problèmes de réutilisation d'ID de transaction déjà attribués (particulièrement important si, en plus, datallowconn vaut false car aucune connexion de maintenance n'y est autorisée dans ce cas).

148 / 275 http://www.bull-formation.com

Page 149: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3 Utilisateurs & Groupes

• Versions

• Utilisateurs

• Groupes

• Attributs

• Droits

3.1 Versions• Version < 8.1. : USER & GROUP

• Version >= 8.1. : ROLE

Avec les versions antérieures à la 8.1.x de PostgreSQL, les droits sont gérés comme dans “Unix” : on peut créer des utilisateurs et des groupes. Les groupes étant une manière logique de grouper les utilisateurs pour faciliter la gestion des privilèges, les droits peuvent être accordés ou révoqués à un groupe entier.

À partir de la version 8.1 apparaît la notion de rôle en lieu et place des utilisateurs et les groupes. Un rôle peut être vu soit comme un utilisateur de la base de données, soit comme un groupe d'utilisateurs de la base de données, suivant la façon dont le rôle est configuré. Les rôles peuvent posséder des objets de la base de données (par exemple des tables) et peuvent affecter des droits sur ces objets à d'autres rôles pour contrôler qui a accès à ces objets. De plus, il est possible de donner l'appartenance d'un rôle à un autre rôle, l'autorisant ainsi à utiliser les droits affectés au rôle dont il est membre.

Les concepts des « utilisateurs » et des « groupes » restent disponibles dans les versions 8.1 et ultérieures. Il n'y a donc pas de problèmes de compatibilité ascendante.

149 / 275 http://www.bull-formation.com

Page 150: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.2 Utilisateurs• SQL : CREATE USER : ajoute un nouvel utilisateur dans le groupe de

bases de données PostgreSQL

• SQL : ALTER USER : change les attributs d'un utilisateur

• SQL : DROP USER : supprime un utilisateur

• SQL : ALTER GROUP : gère l'appartenance d'un utilisateur à un groupe

• Outils système : createuser / dropuser : commandes utilisées pour ajouter ou supprimer un utilisateur de base de données

• SQL : REASSIGN et DROP OWNED : réaffectation/suppression des objets appartenant à un rôle

Exemple : Créer un utilisateur valide jusqu'en 2010 :

CREATE USER tom WITH PASSWORD 'fud77val' VALID UNTIL '2010-01-01';

À partir de la version 8.1.x, la commande :

CREATE USER nom;

est équivalente à :

CREATE ROLE nom LOGIN;

3.3 Groupes• SQL : CREATE GROUP : crée un groupe d'utilisateurs de base de données

• SQL : DROP GROUP : supprime un groupe d'utilisateurs de base de données

• SQL : ALTER GROUP : commande utilisée pour gérer un groupe de base de données

À partir des versions 8.1.x, CREATE GROUP est un alias de CREATE ROLE avec l'option NOLOGIN.

Pour ajouter ou supprimer un utilisateur à un groupe :

150 / 275 http://www.bull-formation.com

Page 151: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

ALTER GROUP nom_group ADD USER utilisateur_1, ... ; ALTER GROUP nom_group DROP USER utilisateur_1, ... ;

3.4 Rôles• Rôles = Utilisateur + Groupe

• SQL : CREATE ROLE : ajoute un nouveau rôle dans une grappe (cluster) de bases de données PostgreSQL.

• SQL : DROP ROLE : supprime un rôle d'un cluster de bases de données

• Outils système : createuser / dropuser

• Table de rôles : pg_roles

Un rôle est une entité qui peut posséder des objets de la base de données et avoir des droits sur la base. Il peut être considéré comme un « utilisateur », un « groupe » ou les deux suivant la façon dont il est utilisé.

Conceptuellement, les rôles de base de données sont totalement séparés des utilisateurs du système d'exploitation. En pratique, il peut être commode de maintenir une correspondance mais cela n'est pas requis. Les rôles sont globaux à toute une installation de groupe de bases de données (et non individuelle pour chaque base).

Les rôles existants sont stockés dans la table du catalogue système pg_authid dont les droits d'accès sont restreints aux seuls super-utilisateurs. Il est cependant possible d'afficher la liste des rôles créés en interrogeant la vue pg_roles :

SELECT rolname FROM pg_catalog.pg_roles;

3.5 Options de ''CREATE ROLE''• INHERIT, NOINHERIT

• LOGIN, NOLOGIN

• CONNECTION LIMIT

• [ ENCRYPTED | UNENCRYPTED ]PASSWORD

Ces clauses précisent si un rôle « hérite » des droits d'un rôle dont il est membre.

Un rôle qui possède l'attribut INHERIT peut automatiquement utiliser tout privilège détenu par un rôle dont il est membre. Sans INHERIT, l'appartenance à un autre rôle

151 / 275 http://www.bull-formation.com

Page 152: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

lui confère uniquement la possibilité d'utiliser SET ROLE pour acquérir les droits de l'autre rôle. Ils ne sont disponibles qu'après cela. Si un rôle herite d'un autre rôle lui aussi INHERIT, il hérite aussi des rôles dont ce dernier est membre.

INHERIT est la valeur par défaut.

Les clauses LOGIN et NOLOGIN précisent si un rôle est autorisé à se connecter, c'est-à-dire si le rôle peut être donné comme nom pour l'autorisation initiale de session à la connexion du client.

Un rôle ayant l'attribut LOGIN peut être vu comme un utilisateur. Un rôle ayant l'attribut NOLOGIN peut être vu comme un groupe.

NOLOGIN est la valeur par défaut.

CONNECTION LIMIT permet de limiter le nombre de connexions en parallèle d'un utilisateur.

[ ENCRYPTED | UNENCRYPTED ]PASSWORD indique si le mot de passe doit être chiffré (ENCRYPTED) ou non (UNENCRYPTED). Sans cette clause, le comportement par défaut dépend du paramètre password_encryption.

3.6 SET ROLESyntaxe :

SET [ SESSION | LOCAL ] ROLE nom

Cette commande permet de changer l'utilisateur courant à l'intérieur d'une session SQL en cours.

LOCAL limite la portée de ce changement à la transaction en cours. SESSION (valeur par défaut) permet à ce changement d'être toujours valable une fois que la transaction est terminée si cette transaction est bien validée.

L'utilisateur de la session courante doit être membre du rôle nommé.

Si le rôle de l'utilisateur de la session comprend l'attribut INHERITS, alors il acquiert automatiquement les droits de chaque rôle qu'il peut prendre par la commande SET ROLE.

À l'opposé, si le rôle de l'utilisateur de la session dispose de l'attribut NOINHERITS, SET ROLE supprime les droits affectés directement à l'utilisateur de la session et les remplace par les droits du rôle nommé.

152 / 275 http://www.bull-formation.com

Page 153: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.7 "REASSIGN OWNED" et "DROP OWNED"Syntaxe :

REASSIGN OWNED BY ancien_role [, ...] TO nouveau_roleDROP OWNED BY role [, ...] [ CASCADE | RESTRICT ]

REASSIGN OWNED permet de remplacer le propriétaire d'objets par un autre propriétaire.

DROP OWNED permet de supprimer les objets possédés par un rôle particulier.

Avant l'apparition de ces instructions en version 8.2, il était nécessaire de supprimer chaque objet avant de pouvoir supprimer le rôle propriétaire.

L'option CASCADE permet de supprimer automatiquement les objets qui dépendent des objets supprimés.

L'option RESTRICT, par défaut, permet de stopper l'opération s'il existe des objets non supprimés dépendants des objets supprimés.

3.8 AttributsLes attributs d'un rôle peuvent être modifiés après sa création avec la commande ALTER ROLE.

Exemple :

ALTER ROLE john WITH PASSWORD 'eurtg83b';

On peut aussi modifier certains paramètres de configuration pour les sessions des utilisateurs.

Syntaxe :

ALTER ROLE utilisateur SET attribut TO valeur;

Exemple de désactivation des parcours d'index :

ALTER ROLE john SET enable_indexscan TO off;

153 / 275 http://www.bull-formation.com

Page 154: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.9 Droits• Accorder des droits à un utilisateur ou rôle :

GRANT privilèges ON base TO utilisateur;

• Retirer des droits à un utilisateur ou rôle :

REVOKE privileges ON base FROM utilisateur;

• GRANT sur les objets de la base de données

• GRANT sur les rôles

GRANT appliqué à un objet de la base de données donne des droits d'accès spécifiques à cet objet à un ou plusieurs rôles. Ces droits sont ajoutés à ceux déjà possédés.

La liste des droits possibles est :

• SELECT, INSERT, UPDATE, DELETE

• RULE, REFERENCES, TRIGGER, CREATE

• TEMPORARY, EXECUTE, USAGE

• ALL

Il est possible de donner des droits sur les colonnes à partir de la version 8.4.

GRANT appliqué à un (ou plusieurs) rôle définit l'appartenance de ce dernier à un autre rôle. L'appartenance à un rôle est importante car elle offre tous les droits accordés à un rôle à l'ensemble de ses membres.

Si WITH ADMIN OPTION est spécifié, le membre peut à la fois octroyer l'appartenance à d'autres rôles, et la révoquer. Sans cette option, les utilisateurs ordinaires ne peuvent pas le faire. Toutefois, les super-utilisateurs peuvent donner ou enlever à tout rôle l'appartenance à un rôle. Les rôles qui possèdent le droit CREATEROLE peuvent agir ainsi sur tout rôle qui n'est pas super-utilisateur.

Par exemple, rendre l'utilisateur “jean” membre de “admins” :

GRANT admins TO jean;

154 / 275 http://www.bull-formation.com

Page 155: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4 Authentification du client

Lorsqu'un client se connecte au serveur, il utilise :

• un moyen de connexion (adresse IP ou socket Unix)

• un nom de base de données

• un nom d'utilisateur

• un mot de passe (optionnel)

PostgreSQL propose des méthodes d'authentifications spécifiques pour chacun des clients. La politique d'authentification est consignée dans le fichier pg_hba.conf.

4.1 Configuration du fichier pg_hba.conf (1/4)Chaque enregistrement détermine :

• un type de connexion

• une plage d'adresses IP (si approprié au type de connexion)

• un ou plusieurs noms de base de données

• un ou plusieurs noms d'utilisateurs, de groupe

• une méthode d'authentification à utiliser

Le premier enregistrement qui correspond aux critères est utilisé pour effectuer l'authentification.

D'autre part, il est possible d'utiliser le caractère @ pour inclure un fichier contenant une liste de noms.

155 / 275 http://www.bull-formation.com

Page 156: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.2 Configuration du fichier pg_hba.conf (2/4)Un enregistrement peut avoir l'un des formats suivants :

local database user auth-method [auth-option]host database user CIDR-address auth-method [auth-option]hostssl database user CIDR-address auth-method [auth-option]hostnossl database user CIDR-address auth-method [auth-option]host database user IP-address IP-mask auth-method [auth-option]hostssl database user IP-address IP-mask auth-method [auth-option]hostnossl database user IP-address IP-mask auth-method [auth-option]

Pour utiliser SSL, vous devez avoir configuré ssl à on.

4.3 Configuration du fichier pg_hba.conf (3/4)• local

• host

• hostssl

• hostnossl

Un enregistrement local intercepte les tentatives de connexion utilisant les sockets du domaine Unix.

Un enregistrement host intercepte les tentatives de connexion utilisant les réseaux TCP/IP (SSL et non SSL).

Un enregistrement hostssl intercepte les tentatives de connexion utilisant TCP/IP avec le chiffrement SSL seulement.

Un enregistrement hostnossl intercepte les tentatives de connexion utilisant TCP/IP sans le chiffrement SSL seulement.

156 / 275 http://www.bull-formation.com

Page 157: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.4 Configuration du fichier pg_hba.conf (4/4)• database: noms de bases de données (all pour toutes les bases)

• user : utilisateurs ou groupes de la base de données

• CIDR-address : échelle d'adresses IP du client

• auth-method : méthode d'authentification à utiliser lors de la connexion

• auth-option : champ optionnel dépendant de la méthode d'authentification choisie

Pour la colonne database :

• La valeur sameuser spécifie que l'enregistrement n'intercepte que si la base de données demandée a le même nom que l'utilisateur demandé.

• La valeur samerole spécifie que l'utilisateur demandé doit être membre du rôle portant le même nom que la base de données demandée

• La valeur replication spécifie qu'il doit s'agir d'une connexion provenant du walreceiver. La connexion servira à envoyer les bouts de journaux de transactions dans le cadre de la réplication en flux.

• Des noms de bases de données multiples peuvent être fournis en les séparant par des virgules.

• Un fichier séparé contenant des noms de bases de données peut être indiqué en faisant précéder le nom de fichier de @.

Pour la colonne user :

• Précéder le nom des groupes par un '+'. Plusieurs noms peuvent être fournis en les séparant avec des virgules.

Une adresse CIDR ressemble à ceci :

• pour une machine: 192.168.143.37/32

• pour un réseau: 192.68.143.0/24

L'ancienne notation à base d'une adresse IP et d'un masque est toujours disponible. Par exemple: 192.168.143.37,255.255.255.255

157 / 275 http://www.bull-formation.com

Page 158: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.5 Méthodes d'authentification (1/3)• trust

• reject

• md5

• crypt

Ce sont toutes des méthodes internes.

trust autorise la connexion sans conditions. reject rejette la connexion sans conditions. md5 demande au client de fournir un mot de passe chiffré MD5.

crypt demande au client de fournir un mot de passe chiffré avec crypt(). Cette option est seulement recommandée pour pouvoir communiquer avec les clients de version antérieure à la 7.2. De plus, elle disparaît en 8.4.

4.6 Méthodes d'authentification (2/3)• password

• krb5

• GSSAPI

• LDAP

• Radius

La méthode password demande au client de fournir un mot de passe non chiffré. Autrement dit, il passe en clair sur le réseau.

La méthode krb5 permet d'utiliser Kerberos V5 pour authentifier l'utilisateur. Ceci n'est disponible que pour les connexions TCP/IP.

La méthode GSSAPI correspond au protocole du standard de l'industrie pour l'authentification sécurisée définie dans RFC 2743. PostgreSQL supporte GSSAPI avec l'authentification Kerberos suivant la RFC 1964 ce qui permet de faire du « Single Sign-On ». Attention, ce n'est disponible qu'à partir de la version 8.3.

La méthode LDAP utilise un serveur LDAP pour authentifier l'utilisateur. Ceci n'est disponible qu'à partir de la version 8.2. Elle se configure comme suit dans le fichier pg_hba.conf :

ldap[s]://nomduserveur[:port]/base dn[;prefix[;suffix]] ldap://ldap.exemple.net/dc=exemple,dc=net;EXEMPLE\

158 / 275 http://www.bull-formation.com

Page 159: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

La méthode Radius utiliser un serveur RADIUS pour authentifier l'utilisateur dès la version 9.0.

4.7 Méthodes d'authentification (3/3)• ident

• pam

La méthode ident Permet d'associer les noms des utilisateurs du système d'exploitation aux noms des utilisateurs du système de gestion de bases de données. Elle récupère le nom de l'utilisateur du système d'exploitation du client et vérifie si l'utilisateur est autorisé à se connecter en tant qu'utilisateur de la base de données. Cette méthode nécessite un paramètre supplémentaire qui est la correspondance indiquée après le mot clé ident.

Le mot clé sameuser permet à n'importe quel utilisateur du système d'exploitation de se connecter en tant qu'utilisateur de base de données du même nom. Ce mot clé disparaît en 8.4 où cette option est la valeur par défaut si aucun usermap n'est défini.

Les correspondances d'identité autres que sameuser sont définies dans le fichier de correspondance d'identité, pg_ident.conf. Ce fichier contient des lignes de la forme suivante :

nom-correspondance nomutilisateur-ident base-donnee-utilisateur

Un démon fournissant le service ident est nécessaire.

Quant à pam, il authentifie en utilisant les Pluggable Authentication Modules (PAM) fournis par le système d'exploitation.

159 / 275 http://www.bull-formation.com

Page 160: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5 Maintenance

• Principes et intérêts des opérations de maintenance

• Sauvegarde de l'instance, sauvegarde des bases de données

• Gestion de l'espace disque utilisée par les tables et index

• Mise à jour des statistiques du planificateur

• Intégration de l'autovacuum dans les opérations de maintenance

• Indexation et ré-indexation pour conserver des index propres

• Gestion des journaux applicatifs

5.1 Principes• Opérations régulières et nécessaires

• Maintenance plus simple qu'avec d'autres SGBD

• Tâches automatisables

Pour fonctionner de façon optimale, un serveur PostgreSQL nécessite quelques opérations de maintenance régulières. Les tâches de maintenance récurrentes ont plusieurs objectifs de :

• « nettoyer » les données

• reconstruire les index

• garder des journaux applicatifs compacts et pertinents

PostgreSQL demande peu de maintenance par rapport à d'autres SGBD. Néanmoins, un suivi vigilant de ces tâches participera beaucoup à conserver un système performant et agréable à utiliser.

Par définition, les tâches récurrentes peuvent facilement être automatisées grâce aux outils standards d'UNIX, et notamment les scripts cron. La responsabilité de la mise en place de ces scripts et du contrôle de leur bon fonctionnement relève de l'administrateur de la base.

160 / 275 http://www.bull-formation.com

Page 161: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.2 Sauvegarde• pg_dump & pg_dumpall

• Sauvegarde disque en ligne

• Définir une politique de sauvegarde

• Vérifier la restauration des sauvegardes

Le principe de pg_dump est de générer un fichier texte (ou binaire en mode -F c) de commandes SQL (appelé « fichier dump »), qui, s'il est renvoyé au serveur, recrée une base de données identique à celle sauvegardée. L'usage basique est :

pg_dump base_de_donnees > fichier_de_sortie

Le fichier dump peut être restauré avec la commande :

psql base_de_donnees < fichier_d_entree

pg_dumpall simplifie la tâche de l'administrateur en sauvegardant toutes les bases de données d'un groupe de bases de données (cluster) et préserve les données communes au groupe de bases (les rôles par exemple) :

pg_dumpall > fichier_de_sortie

Le fichier de sauvegarde résultant peut être restauré avec psql :

psql -f fichier_d_entree postgres

Le principe de la sauvegarde disque « en ligne » est de sauvegarder les fichiers de la base de données alors que celle-ci est encore en activité, en ignorant les erreurs de modification de fichiers détectées par l'outil de sauvegarde (erreurs normales, puisque la base continue de fonctionner). À la restauration, la base de données doit être capable de rejouer l'ensemble des journaux de transaction ayant été générés pendant la période de sauvegarde, afin de restaurer l'intégrité des fichiers de la base.

Cette méthode impose donc avant tout que le cluster archive ses journaux de transaction, mais aussi qu'on notifie au cluster qu'il est en cours de sauvegarde, afin qu'il trace la liste des fichiers dont il aura besoin pour retrouver son intégrité en cas de restauration.

Cette procédure est plus compliquée que pg_dump, car la procédure de restauration

161 / 275 http://www.bull-formation.com

Page 162: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

contient davantage d'étapes et impose des manipulations de fichiers. Son autre limitation est que la restauration se fait pour l'ensemble du cluster (plusieurs bases potentiellement, puisqu'on ne peut pas restaurer les fichiers de chaque base de façon individuelle).

Elle présente par contre de nombreux avantages : elle est beaucoup plus performante, particulièrement dans le cas de grosse volumétrie (à partir de quelques dizaines de gigaoctets), et permet une sauvegarde dite 'en continu' : on peut restaurer la base à n'importe quel point dans le temps, pourvu qu'on dispose d'une sauvegarde antérieure à ce point, et des journaux de transaction archivés jusqu'à ce point.

Pour bien définir et automatiser les procédures de sauvegardes, on peut utiliser les 5 axes suivants :

• Pourquoi sauvegarder ? Dans un but d'archivage ? Pour assurer la haute disponibilité des données ?

• Quels sont les ensembles de données essentiels et ceux qui ne le sont pas ?

• Quelle fréquence de sauvegarde est la plus adaptée à vos besoins ?

• Quels supports ? DVD ? Enregistrements sur bande ? Réplication sur une machine distante ?

• Quels outils ? Commandes internes de PostgreSQL ou applications externes ?

Enfin, il est important de tester ses sauvegardes, ses méthodes de restauration et de leur bon fonctionnement régulièrement.

5.3 Espace disque - VACUUMLa commande VACUUM permet à PostgreSQL de cartographier les espaces libres disponibles dans les tables et index.

Elle peut être lancée en concurrence avec les autres opérations.

PostgreSQL ne supprime pas les versions périmées des lignes après un UPDATE ou un DELETE. La commande VACUUM permet de « libérer » l'espace utilisé par ces lignes afin d'éviter un accroissement continuel du volume occupé sur le disque.

Une table qui subit beaucoup de mises à jour et suppressions nécessitera des nettoyages plus fréquents que les tables rarement modifiées. Le VACUUM « simple » marque les données expirées dans les tables et les index pour une utilisation future. Il ne tente pas de récupérer l'espace utilisé par les données obsolètes, sauf si l'espace est à la fin de la table et qu'un verrou exclusif de table puisse être facilement obtenu. L'espace inutilisé au début ou au milieu du fichier ne provoque pas un raccourcissement du fichier et ne redonne pas d'espace mémoire au système d'exploitation.

La version 8.4 améliore les performances du VACUUM en lui permettant de ne parcourir que la partie de la table qui a été modifiée. Cela a un gros impact pour les tables les

162 / 275 http://www.bull-formation.com

Page 163: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

moins modifiées.

5.4 Espace disque - VACUUM FULL• nettoyage plus efficace mais plus lent

• méthode « agressive »

• impact non négligeable sur les performances

La commande VACUUM FULL libère l'espace consommé par les lignes périmées et le rend au système d'exploitation.

Cette variante de la commande VACUUM acquiert un verrou exclusif sur chaque table. Elle peut donc avoir un effet extrêmement négatif sur les performances de la base de données.

5.5 Espace disque - stratégieQuand faut-il utiliser « VACUUM » ?

• Nettoyages réguliers (1 fois/jour)

• Maintenance de base

Quand faut-il utiliser « VACUUM FULL » ?

• Après des suppressions massives de données

• Lorsque la base n'est pas en production

Des VACUUM standards et une fréquence modérée sont une meilleure approche que des VACUUM FULL, même non fréquents, pour maintenir des tables mises à jour fréquemment.

VACUUM FULL est recommandé dans les cas où vous savez que vous avez supprimé ou modifié une grande partie des lignes d'une table, de façon à ce que la taille de la table soit réduite de façon conséquente.

163 / 275 http://www.bull-formation.com

Page 164: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.6 Statistiques (1/2)• ANALYZE

• Met à jour les statistiques de la base

• Utile pour l'optimiseur de requêtes

Conseil : 1 fois/jour, en même temps que VACUUM

L'optimiseur de requêtes de PostgreSQL s'appuie sur des informations statistiques du contenu des tables. Ces statistiques sont collectées par la commande ANALYZE, qui peut être invoquée seule ou comme une option de VACUUM. Il est important d'avoir des statistiques relativement à jour sans quoi des mauvais choix dans les plans d'exécution pourraient pénaliser la performance de la base.

En général, une bonne stratégie est de programmer ANALYZE une fois par jour. Ceci peut être couplé à un VACUUM (la nuit par exemple) pour gagner en performances.

5.7 Statistiques (2/2)• Échantillonnage pas défaut: default_statistics_target

• Modifier les statistiques par colonne:

ALTER TABLE ma_table ALTER ma_colonne SET STATISTICS 200;

Le paramètre default_statistics_target initialise l'échantillonnage par défaut des statistiques pour les colonnes de chacune des tables. Des valeurs plus importantes accroissent le temps nécessaire à exécuter ANALYZE mais pourraient améliorer les estimations du planificateur. La valeur par défaut est de 10, jusqu'en version 8.3 et 100 à partir de la version 8.4.

Ainsi, pour chaque colonne avant la version 8.4, les 10 valeurs les plus fréquentes et 10 histogrammes sont stockés dans pg_stats en guise d'échantillon représentatif des données. 10 fournissant des statistiques plutôt pauvres et parfois éloignées de la réalité, avec l'optimisation du processus ANALYZE, la valeur par défaut a donc été relevée à 100 en 8.4.

Si vous voulez des statistiques plus fines, vous pouvez passer ce paramètre à 300. Des valeurs supérieures sont possibles, sans dépasser la limite de 1000, mais provoquent un ralentissement d'ANALYZE, un accroissement de la table pg_stats, et un temps de calcul des plans d'exécution plus long (non mesurable jusqu'à 100).

Voici la commande à utiliser si l'on veut modifier cette valeur colonne par colonne, la

164 / 275 http://www.bull-formation.com

Page 165: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

valeur ainsi spécifiée prévaut sur la valeur de default_statistics_target:

ALTER TABLE ma_table ALTER ma_colonne SET STATISTICS 200;

5.8 Gel des XID• l'identifiant de transaction est un nombre croissant et limité

• si le XID revient à zéro Risque de perte des données !⇒

• 2 solutions : initdb ou VACUUM

• Autovacuum à partir de la version 8.1

Le mécanisme de contrôle de concurrence multi-version (MVCC) de PostgreSQL s'appuie sur la possibilité de comparer des identifiants de transactions (XID). La version d'une ligne dont le XID d'insertion est supérieur au XID de la transaction en cours est « dans le futur » et ne doit pas être visible de la transaction courante.

Comme les identifiants ont une taille limitée (32 bits à ce jour), une base en activité depuis longtemps (plus de 4 milliards de transactions) pourrait connaître un cycle des identifiants de transaction : le XID reviendra à 0 et soudainement les transactions du passé sembleront appartenir au futur - ce qui signifie qu'elles deviennent invisibles. Ceci peut conduire à une perte de données totale.

Avant PostgreSQL 7.2, la seule parade contre ces cycles de XID était de ré-exécuter initdb au maximum tous les 4 milliards de transaction.

VACUUM a une approche plus fine : toute table dans la base doit être nettoyée au moins une fois tous les milliards de transactions. Lorsqu'il reste moins de 10 millions de transactions avant le renouveau du cycle, PostgreSQL émet des messages d'alertes (voir ci-dessous) pour chaque transaction exécutée.

WARNING: database "z" must be vacuumed within 177006525 transactions HINT: To avoid a database shutdown, execute a full-database VACUUM in "z".

À partir de la version 8.1, et même s'il est désactivé, l'autovacuum va se lancer automatiquement pour chaque table ayant besoin d'un rafraîchissement du XID.

165 / 275 http://www.bull-formation.com

Page 166: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.9 Le démon Autovacuum• Versions >= 8.1.x

• Automatiser VACUUM et ANALYZE

• Le démon détermine si le vacuum et/ou l'analyze sont nécessaires

À partir de PostgreSQL 8.1, il existe un processus serveur optionnel et séparé appelé le démon autovacuum, dont le but est d'automatiser l'exécution des commandes VACUUM et ANALYZE. Une fois activé, le démon autovacuum s'exécute périodiquement et vérifie les tables ayant un grand nombre de lignes insérées, mises à jour ou supprimées.

Deux conditions sont utilisées pour déterminer quelle opération appliquer :

limite du vacuum = autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * Nlimite du analyze = autovacuum_analyze_threshold + autovacuum_analyze_scale_factor * N

où N est le nombre de lignes dans la table.

Le démon autovacuum peut être paramétré à partir du fichier “postgresql.conf” de façon globale. Il est possible d'avoir une configuration plus fine en modifiant le contenu de la table système pg_autovacuum pour les versions antérieures à la 8.4, et en modifiant les informations de stockage des tables pour les versions ultérieures.

5.10 Autovacuum : paramètres (1/2)• autovacuum

• log_autovacuum_min_duration

• autovacuum_naptime

• autovacuum_max_workers

• autovacuum_freeze_max_age

Le paramètre autovacuum contrôle si le serveur doit lancer le sous-processus autovacuum. Désactivé par défaut pour 8.1 et 8.2, activé pour 8.3 et supérieures.

stats_start_collector et stats_row_level (respectivement track_activities et track_counts en 8.3) doivent aussi être actifs pour que ce démon soit exécuté.

log_autovacuum_min_duration permet de tracer l'activité du sous-processus autovacuum si ce dernier dure plus que ce nombre de secondes. -1 désactive les

166 / 275 http://www.bull-formation.com

Page 167: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

traces, 0 active la trace de toute exécution d'autovacuum. Paramètre disponible à partir de la version 8.3.

En 8.2, autovacuum_naptime spécifie le délai entre les tours d'activité pour le sous-processus autovacuum. À chaque tour, le sous-processus examine une base de données et lance autant de commandes VACUUM et ANALYZE que nécessaire pour les tables de la base de données. Le délai est mesuré en secondes et vaut par défaut 60 secondes.

En 8.3, ce nombre divisé par le nombre de bases de données spécifie le délai pour l'exécution d'un nouveau processus autovacuum worker.

Le nombre maximum de sous-processus peut-être spécifié par le paramètre autovacuum_max_workers, disponible à partir de la version 8.3.

Enfin, autovacuum_freeze_max_age spécifie l'âge maximum (en transactions) que le champ pg_class.relfrozenxid puisse atteindre avant de forcer l'exécution d'un VACUUM. Paramètre disponible à partir de la version 8.2.

5.11 Autovacuum : paramètres (2/2)• autovacuum_vacuum_threshold

• autovacuum_analyze_threshold

• autovacuum_vacuum_scale_factor

• autovacuum_analyze_scale_factor

• autovacuum_vacuum_cost_delay

• autovacuum_vacuum_cost_limit

Le paramètre autovacuum_vacuum_threshold spécifie le nombre minimum de lignes mises à jour ou supprimées nécessaires pour déclencher un VACUUM sur une table.

autovacuum_analyze_threshold a la même vocation pour l'ordre ANALYZE, mais ajoute à ce nombre minimum de ligne celui des lignes insérées.

autovacuum_vacuum_scale_factor et autovacuum_analyze_scale_factor spécifient une fraction de la taille de la table à ajouter aux paramètres de threshold associés à chaque opération pour décider du moment où déclencher respectivement un VACUUM ou un ANALYZE.

autovacuum_vacuum_cost_delay spécifie la valeur du coût du délai utilisée dans les opérations de VACUUM. Si -1 est spécifié (la valeur par défaut), la valeur habituelle de vacuum_cost_delay sera utilisée. En 8.3, ce délai est réparti entre tous les processus « autovacuum workers ».

Enfin, autovacuum_vacuum_cost_limit spécifie la valeur limite du coût utilisée dans les opérations de VACUUM automatiques. Si -1 est spécifié (la valeur par défaut), la valeur courante de vacuum_cost_limit sera utilisée.

167 / 275 http://www.bull-formation.com

Page 168: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.12 IndexationLancer REINDEX régulièrement permet :

• de gagner de l'espace disque

• d'améliorer les performances (pour les index B-Tree)

• de réparer un index corrompu

• VACUUM en FULL ou pas ne provoque pas de réindexation…

REINDEX reconstruit un index en utilisant les données stockées dans la table, remplaçant l'ancienne copie de l'index.

Dans les versions de PostgreSQL antérieures à la 7.4, la réindexation périodique était fréquemment nécessaire pour éviter l'« inflation des index ».

Dans les versions 7.4 et ultérieures, les pages d'index qui sont devenues complètement vides sont récupérées pour être réutilisées. Il existe toujours la possibilité d'une utilisation inefficace de l'espace : si pratiquement toutes les clés d'index d'une page ont été supprimées, la page reste allouée. La possibilité d'inflation n'est pas indéfinie mais il serait toujours utile de planifier une réindexation périodique pour les index ayant un tel usage.

De plus, pour les index B-tree, un index tout juste construit est quelque peu plus rapide qu'un index qui a été mis à jour plusieurs fois parce que les pages adjacentes logiquement sont habituellement aussi physiquement adjacentes dans un index nouvellement créé (cette considération ne s'applique pas aux index non B-tree). Il pourrait être intéressant de ré-indexer périodiquement, simplement pour améliorer la vitesse d'accès.

La réindexation est aussi utile dans le cas d'un index corrompu ne contenant plus de données valides. Bien qu'en théorie, ceci ne devrait jamais arriver, en pratique, les index peuvent se corrompre à cause de bogues dans le logiciel ou d'échecs matériels. L'index à réparer peut être utilisateur ou système (utiliser REINDEX SYSTEM pour cela).

Enfin, l'opération VACUUM, FULL ou pas, ne provoque pas de réindexation. Elle a même tendance à fragmenter les index.

La commande système reindexdb peut être utilisée pour réindexer une table, une base ou un cluster de bases de données.

168 / 275 http://www.bull-formation.com

Page 169: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.13 CLUSTER ou VACUUM ?• CLUSTER est une alternative à VACUUM FULL

• Plus rapide que VACUUM FULL suivi de REINDEX

• Attention, CLUSTER nécessite près du double de l'espace disque utilisé pour stocker la table et ses index

• Variation de la table et des index associés:

Évolution de la volumétrie d'une base suite aux diverses commandes de maintenances

Parce que la commande CLUSTER provoque une réorganisation des données de la table, le résultat obtenu est équivalent à un VACUUM FULL: les données sont organisées comme l'index et les pages de données sont adjacentes dans les fichiers.

Comme CLUSTER déplace les blocs de données, il provoque une réindexation de tous les index liés à la table.

Au final, CLUSTER est équivalent à un VACUUM FULL suivi d'un REINDEX, à l'organisation physique des blocs de données près.

5.14 Journaux applicatifs• utiles en cas de problèmes

• volumineux

• utiliser un système de gestion des journaux applicatifs tels que logrotate ou sysklog ou rsyslog

Les journaux applicatifs jouent un rôle essentiel lorsque des problèmes surviennent ou pendant des phases de tests.

169 / 275 http://www.bull-formation.com

Page 170: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Cependant, ces fichiers ont tendance à être volumineux, en particulier si le niveau de débogage est important. Il est donc conseillé de bien analyser ce dont on a besoin d'y tracer sur un serveur de production.

Attention pour ceux qui veulent utiliser sysklog:

• sur beaucoup de systèmes, sysklog n'est pas très fiable, particulièrement avec les messages très gros ; il pourrait tronquer ou supprimer des messages au moment où vous en aurez le plus besoin.

• sysklog force la synchronisation de tous les messages sur le disque, ce qui n'est pas très bon sur le plan des performances.

• à partir de Lenny, rsyslog devient le gestionnaire de syslog par défaut sur les serveurs debian. Il est intéressant de constater que rsyslog propose un plug-in pour PostgreSQL, c'est-à-dire que rsyslog est capable de stocker les messages syslog dans une base PostgreSQL.

http://www.rsyslog.com/

170 / 275 http://www.bull-formation.com

Page 171: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6 Conclusion

PostgreSQL demande peu de travail au quotidien.

À l'installation, certaines tâches doivent être automatisées, par exemple la sauvegarde, les VACUUM.

Pour le reste, il s'agit surtout de surveiller la bonne exécution des scripts automatisés et le contenu des journaux applicatifs.

6.1 Pour aller plus loin• Documentation officielle :

Chapitre 22. Planifier les tâches de maintenance

• « Opérations de maintenance sous PostgreSQL »

http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql

6.2 QuestionsN'hésitez pas, c'est le moment !

171 / 275 http://www.bull-formation.com

Page 172: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Travaux Pratiques

172 / 275 http://www.bull-formation.com

Page 173: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Énoncés

1.1 Pré-requisDans le fichier postgresql.conf, désactiver le démon autovacuum.

Puis, relancer PostgreSQL.

1.2 Gestion des rôlesAjouter la table facture (f_id int4, f_objet varchar(200), f_date timestamp) à la base de données cave.

1.2.1 Création d'un utilisateur et d'un groupeA l'aide du super-utilisateur postgres:

• créer un rôle secretariat qui a le droit de visualiser, d'ajouter, de mettre à jour et de supprimer des items de la table facture

• créer un utilisateur bob appartenant au groupe secretariat

• vérifier la création des deux rôles

A l'aide de l'utilisateur bob:

• insérer les factures ayant pour objet “Vin de Bordeaux” et “Vin de Bourgogne” avec la date et l'heure courante

• sélectionner les factures de la table factures

• mettre à jour la deuxième facture avec la date et l'heure courante

• supprimer la première facture

1.2.2 Modification des permissionsRetirer les droits DELETE sur la table facture pour le rôle secretariat. Vérifier qu'il n'est pas possible de supprimer la deuxième facture avec l'utilisateur bob.

Retirer tous les droits pour le groupe secretariat sur la table appellation et vérifier que l'utilisateur bob appartenant au groupe secrétariat ne peut pas sélectionner les appellations contenues dans la table appellation.

Autoriser l'utilisateur bob à accéder à la table appellation en lecture.

Vérifier que l'utilisateur bob peut désormais accéder à la table appellation.

173 / 275 http://www.bull-formation.com

Page 174: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1.2.3 Héritage des droits au loginCréer un utilisateur tina appartenant au rôle secrétariat, mais n'héritant pas des droits au login.

Vérifier que l'utilisateur tina ne peut pas accéder à la table facture.

Positionner le rôle secretariat et sélectionner les données de la table facture. Vérifier que l'utilisateur tina possède maintenant les droits du rôle secretariat.

1.3 pg_hba.confÉtablissez la configuration suivante pour accéder à la base de données:

• autorisez votre voisin de gauche à se connecter sans mot de passe avec l'utilisateur tina.

• autorisez votre voisin de droite à se connecter avec un mot de passe (autorisation en IP sans ssl) avec l'utilisateur bob.

1.4 VACUUM

1.4.1 Nettoyage avec VACUUMAfficher la taille de la table stock.

Copier le contenu de la table dans une nouvelle table (stock_bis).

Supprimer le contenu de la table stock. Quel est l'espace disque utilisé par cette table ?

Insérer le contenu de la table stock_bis dans la table stock. Quel est l'espace disque utilisé par la table ?

Répéter plusieurs fois les deux dernières commandes (en terminant par insert). Quel est l'espace disque utilisé par la table ?

Effectuer un VACUUM simple. Vérifier la taille de la base.

Vider la table stock, insérer à nouveau le contenu de la table stock_bis. L'espace mis à disposition a-t-il été utilisé ?

1.4.2 Nettoyage avec VACUUM FULLExécuter à nouveau une série de suppression et d'insertion dans la table stock.

Effectuer un VACUUM FULL. Quel est l'impact sur la taille de la base ?

1.5 Truncate ou Delete ?Observer la différence entre les commandes delete et truncate en tronquant la table vin_bis.

174 / 275 http://www.bull-formation.com

Page 175: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1.6 StatistiquesVérifier les paramètres de récupération de statistiques au sein du fichier postgresql.conf.

Quelle est la table système collectant les statistiques collectées par la commande ANALYZE ?

Il existe une méthode plus “confortable” d'accéder aux données de cette table.

Afficher les statistiques collectées pour la table region.

Lancer la collecte pour cette table uniquement.

Observer les modifications dans la table système de statistiques.

1.7 Gel des XIDLa table pg_database contient des informations concernant la date du dernier gel de XID. Trouver la requête permettant de visualiser le nombre de transactions effectuées entre le XID limite et le XID courant.

1.8 Démon AutovacuumDans le fichier postgresql.conf, activer le démon autovacuum.

Modifier la fréquence pour déclencher un vacuum automatique toutes les 30 secondes.

Vérifier que vos modifications ont été prises en comptes en interrogeant la table pg_settings.

1.9 RéindexationRecréer l'index de la table appelation.

Comment recréer tous les index de la base cave ?

Comment recréer uniquement les index des tables systèmes ?

Quelle est la différence entre la commande REINDEX et la séquence “DROP INDEX + CREATE INDEX” ?

1.10 TracesQuelle est la méthode de gestion des logs utilisée par défaut ?

Modifier le fichier postgresql.conf pour utiliser le programme interne de rotation des journaux. Les logs doivent désormais être sauvegardés das le répertoire /tmp/TP_MAINTENANCE/ et automatiser la rotation des journaux pour générer un nouveau fichiers de logs toutes les 5 minutes, quelque soit la quantité de logs archivés.

Modifier la configuration pour collecter un maximum d'information dans les journaux.

Ecrire un script shell qui compresse les fichiers de logs vieux de 10 minutes et qui

175 / 275 http://www.bull-formation.com

Page 176: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

“nettoie” le répertoire en supprimant les journaux vieux de 30 minutes.

176 / 275 http://www.bull-formation.com

Page 177: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Solutions

2.1 Pré-requisDans le fichier postgresql.conf, désactiver le démon autovacuum.

Puis, relancer PostgreSQL.

2.2 Gestion des rôlesConnexion avec l'utilisateur caviste (administrateur de la base cave):

$ psql -U caviste cave

Création de la table facture:

caviste@cave=> CREATE TABLE facture (f_id int4, f_objet varchar(200), f_date timestamp);

2.2.1 Création d'un utilisateur et d'un groupeCréation du rôle secretariat avec l'utilisateur postgres:

postgres@cave=> CREATE ROLE secretariat;postgres@cave=> GRANT SELECT, INSERT, UPDATE, DELETE ON facture TO secretariat;

Création de l'utilisateur bob appartenant au groupe secretariat:

postgres@cave=> CREATE ROLE bob LOGIN IN GROUP SECRETARIAT;

Vérification de la création des deux rôles:

postgres@cave=> SELECT * FROM pg_roles;

(Vous pouvez aussi utiliser \du pour obtenir la liste des utilisateurs, et \dp pour connaître les droits des objets).

Connexion avec l'utilisateur bob:

$ psql -U bob cave

177 / 275 http://www.bull-formation.com

Page 178: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Insertion des factures:

bob@cave=> INSERT INTO facture (f_id, f_objet, f_date) VALUES (1, 'Vin de Bordeaux', now());bob@cave=> INSERT INTO facture (f_id, f_objet, f_date) VALUES (2, 'Vin de Bourgogne', now());

Sélectionner les factures:

bob@cave=> SELECT * FROM facture;

Modifier la deuxième facture avec la date et l'heure courante:

bob@cave=> UPDATE facture SET f_date = now() WHERE f_id = 2;

Supprimer la première facture:

bob@cave=> DELETE FROM facture WHERE f_id = 1;

2.2.2 Modification des permissionsRetirer les droits DELETE sur la table facture pour le rôle secretariat avec l'utilisateur postgres:

postgres@cave=> REVOKE DELETE ON facture FROM secretariat;

Vérifier qu'il n'est pas possible de supprimer la deuxième facture avec l'utilisateur bob:

bob@cave=> DELETE FROM facture WHERE f_id = 2;

Retirer tous les droits pour le groupe secretariat sur la table appellation:

postgres@cave=> REVOKE ALL ON appellation FROM secretariat;

Vérifier que l'utilisateur bob appartenant au groupe secretariat ne peut pas sélectionner les appellations contenues dans la table appellation:

secretariat@cave=> SELECT * FROM appellation;

Autoriser l'utilisateur bob à accéder à la table appellation en lecture:

postgres@cave=> GRANT SELECT ON appellation TO bob;

Vérifier que l'utilisateur bob peut désormais accéder à la table appellation:

178 / 275 http://www.bull-formation.com

Page 179: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

bob@cave=> SELECT * FROM appellation;

2.2.3 Héritage des droits au loginCréer un utilisateur tina appartenant au rôle secrétariat:

postgres@cave=> CREATE ROLE tina LOGIN NOINHERIT;

Donner les droits du rôle secretariat à l'utilisateur tina:

postgres@cave=> GRANT secretariat TO tina;

Se connecter avec l'utilisateur tina à la base de données cave et vérifier qu'il n'est pas possible d'accéder à la table facture:

$ psql -U tina cave

tina@cave=> SELECT * FROM facture;

Positionner le rôle secretariat et sélectionner les données de la table facture:

tina@cave=> SET role secretariat;secretariat@cave=> SELECT * FROM facture;

L'utilisateur tina possède maintenant les droits du rôle secretariat.

2.3 pg_hba.confPour autoriser vos voisins à accéder à la base, ajouter les lignes suivantes dans le fichier pg_hba.conf :

# pour le voisin à votre gauche avec l'adresse IP 10.42.X.Y/32host cave tina 10.42.X.Y/32 trust# pour le voisin à votre droite avec l'adresse IP 10.42.X.Z/32hostnossl cave bob 10.42.X.Z/32 md5

2.4 VACUUM

2.4.1 Nettoyage avec VACUUMPour visualiser la taille de la table, il suffit d'utiliser la fonction pg_relation_size :

caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));

179 / 275 http://www.bull-formation.com

Page 180: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Retrouver facilement une fonction Il est facile de retrouver facilement une fonction en effectuant une recherche par mot clé dans psql. Exemple:

postgres=# \df *pretty*Liste des fonctions-[ RECORD 1 ]------------------+---------------Schéma | pg_catalogNom | pg_size_prettyType de données du résultat | textType de données des paramètres | bigintType | normal

Création d'une copie de la table stock :

caviste@cave=> CREATE TABLE stock_bis AS SELECT * FROM stock;

Suppression des données dans la table:

caviste@cave=> DELETE FROM stock;

L'espace disque est toujours utilisé :

caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));

Réinsertion des données à partir de la copie :

caviste@cave=> INSERT INTO stock SELECT * FROM stock_bis;

L'espace disque utilisé a doublé :

caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));

Répéter ces deux dernières commandes plusieurs fois (en terminant par INSERT) et observer la taille de la table :

caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));

La commande vacuum “nettoie” mais ne “libère” pas d'espace disque :

caviste@cave=> VACUUM stock;...caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));

180 / 275 http://www.bull-formation.com

Page 181: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Vider la table stock, insérer à nouveau le contenu de la table stock_bis :

caviste@cave=> DELETE FROM stock;-- ...caviste@cave=> INSERT INTO stock SELECT * FROM stock_bis;-- ...caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));

Vérifier la taille de la base, PG a réutilisé des espaces disponibles :

caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));

2.4.2 Nettoyage avec VACUUM FULLA nouveau, supprimer et insérer massivement des tuples dans la base puis lancer un vacuum full :

caviste@cave=> DELETE FROM stock;-- ...caviste@cave=> INSERT INTO stock SELECT * FROM stock_bis;-- ...caviste@cave=> DELETE FROM stock;-- ...caviste@cave=> INSERT INTO stock SELECT * FROM stock_bis;-- ...caviste@cave=> DELETE FROM stock;-- ...caviste@cave=> INSERT INTO stock SELECT * FROM stock_bis;-- ...caviste@cave=> DELETE FROM stock;-- ...caviste@cave=> INSERT INTO stock SELECT * FROM stock_bis;-- ...caviste@cave=> SELECT pg_size_pretty(pg_relation_size('stock'));-- ...caviste@cave=> vacuum FULL stock;

2.5 Truncate ou Delete ?On tronque la table vin_bis. L'espace disque est immédiatement libéré :

cave=> TRUNCATE vin_bis;TRUNCATE TABLEcave=> SELECT pg_size_pretty(pg_relation_size('vin_bis'));pg_size_pretty---------------- 0 bytes(1 ligne)

2.6 StatistiquesLes paramètres de contrôle de la fonction de récupération de statistiques sont :

181 / 275 http://www.bull-formation.com

Page 182: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

track_activities = ontrack_counts = on

Les données collectées sont stockées dans la table pg_statistics. L'utilisateur caviste ne dispose pas des droits nécessaire pour accéder à ces données :

$ su - postgres$ psql cave...postgres@cave=> SELECT * FROM pg_statistic;

La vue pg_stats facilite l'accès à ces données :

cave=> SELECT * FROM pg_stats;

Pour afficher les informations concernant la table region, on exécute la requête suivante :

cave=> SELECT * FROM pg_stats WHERE tablename='region';

Pour le moment, aucune donnée n'a été collectée pour cette table. On déclenche donc la collecte avec la commande ANALYZE :

cave=> analyze region;

Cette fois, la table pg_statistics contient des informations à propos des statistiques de la table region :

cave=> SELECT * FROM pg_stats WHERE tablename='region';

2.7 Gel des XIDLa requête SQL ci-dessous indique le nombre de transactions effectuées entre le XID limite et le XID courant :

SELECT datname, age(datfrozenxid) FROM pg_database;

2.8 Démon AutovacuumLes paramètres du fichier postgresql.conf régissant l'activité du démon commencent par le préfixe autovacuum_ :

autovacuum = onautovacuum_naptime = 60

182 / 275 http://www.bull-formation.com

Page 183: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

autovacuum_vacuum_threshold = 1000autovacuum_analyze_threshold = 500autovacuum_vacuum_scale_factor = 0.4autovacuum_analyze_scale_factor = 0.2autovacuum_vacuum_cost_delay = -1autovacuum_vacuum_cost_limit = -1

Pour augmenter la fréquence de l'autovacuum, modifier la valeur de naptime :

autovacuum_naptime = 10

Ensuite recharger le fichier postgresql.conf pour que les modifications soient prises en compte. Il n'est pas nécessaire de redémarrer le serveur :

# /etc/init.d/postgresql reload

Attention, sous Debian, il s'agira du script /etc/init.d/postgresql-8.4 pour une version 8.4.

Pour vérifier que les modifications sont été effectuées, exécuter la requête suivante :

SELECT name, setting, short_descFROM pg_settingsWHERE name ~ 'autovacuum';

2.9 RéindexationLa réindexation d'une table se fait de la manière suivante :

REINDEX TABLE appelation;

Pour recréer tous les indexes :

REINDEX DATABASE cave;

Pour réindexer uniquement les tables systèmes :

REINDEX SYSTEM cave;

REINDEX est similaire à une suppression et à une nouvelle création de l'index. Cependant les conditions de verrouillage sont différentes :

• REINDEX verrouille les écritures mais pas les lectures de la table mère de l'index. Il prend aussi un verrou exclusif sur l'index en cours de traitement, ce qui bloque les lectures qui tentent d'utiliser l'index.

• Au contraire, DROP INDEX crée temporairement un verrou exclusif sur la table

183 / 275 http://www.bull-formation.com

Page 184: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

parent, bloquant ainsi écritures et lectures. Le CREATE INDEX qui suit verrouille les écritures mais pas les lectures ; comme l'index n'existe pas, aucune lecture ne peut être tentée, signifiant qu'il n'y a aucun blocage et que les lectures sont probablement forcées de réaliser des parcours séquentiels complets.

2.10 TracesPar défaut le mode de journalistation est stderr.

Pour activer le récupérateur interne de log il faut modifier le paramètre suivant dans le fichier postgresql.conf :

logging_collector = on

Puis paramétrer le comportement du récupérateur :

log_directory = '/tmp/TP_MAINTENACE'# Attention !# ce repertoire doit être accessible pour l'utilisateur postgres

log_rotation_age = 5log_rotation_size = 0log_min_messages = debug5

Un script shell pour gérer la rotation des logs et conserver un volume de logs constant :

#/bin/bash # On compresse les fichiers vieux de 3 minutesfind . -type f -cmin +3 -exec gzip -9 {} \; -print # On supprime les fichiers vieux de 30 minutesfind . -type f -cmin +30 -exec rm -f {} \; -print

Pour fonctionner correctement, ce script doit être exécuté par l'utilisateur postgres ou par root.

184 / 275 http://www.bull-formation.com

Page 185: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

PostgreSQL : Sauvegarde / Restauration

185 / 275 http://www.bull-formation.com

Page 186: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Introduction

La sauvegarde des bases de données est essentielle pour la sécurisation des données. Le matériel peut être très robuste et tolérant aux pannes mais personne n'est à l'abri d'une imprudence ou d'un désastre.

Comme tout bon SGBD qui se respecte, PostgreSQL propose différentes solutions de sauvegarde à froid et à chaud ainsi que des méthodes de restauration partielle ou complète.

1.1 Menu• Politique de sauvegarde

• Sauvegarde SQL

• Sauvegarde au niveau système de fichiers (à froid)

• Sauvegarde à chaud

• Utilisation d'outils externes d'archivage

1.2 Licence Creative Commons CC-BY-NC-SAVous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Cette formation (diapositives, manuels et travaux pratiques) est sous licence CC-BY-NC-SA.

Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

186 / 275 http://www.bull-formation.com

Page 187: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'œuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'œuvre).

Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.

Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.

À chaque réutilisation ou distribution de cette création, vous devez faire apparaître clairement au public les conditions contractuelles de sa mise à disposition. La meilleure manière de les indiquer est un lien vers cette page web.

Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits sur cette œuvre.

Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.

Le texte complet de la licence est disponible à cette adresse: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode

187 / 275 http://www.bull-formation.com

Page 188: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Définir une politique de sauvegarde

• Pourquoi établir une politique ?

• Que sauvegarder ?

• À quelle fréquence sauvegarder les données ?

• Quels supports ?

• Quels outils ?

• Vérifier la restauration des sauvegardes

Afin d'assurer la sécurité des données, il est nécessaire de faire des sauvegardes régulières.

Ces sauvegardes vont servir, en cas de problème, à restaurer les bases de données dans un état le plus proche possible du moment où le problème est survenu.

Il est possible de sauvegarder :

• une ou plusieurs tables ;

• une ou plusieurs bases de données ;

• l'ensemble des bases de données du cluster :

• l'ensemble des fichiers du cluster PostgreSQL.

Il faut déterminer la fréquence de sauvegarde des données selon :

• le volume de données à sauvegarder ;

• la criticité des données ;

• la quantité de données qu'il est « acceptable » de perdre en cas de

problème.

Il est possible de sauvegarder les données par NFS, sur des disques dédiés, sur des bandes. Dans tous les cas, il est fortement déconseillé de faire les sauvegardes sur les disques utilisés par la base de données.

Il est essentiel de s'assurer que les sauvegardes sont consistantes.

188 / 275 http://www.bull-formation.com

Page 189: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.1 ObjectifsLa sauvegarde et la restauration des bases de données peuvent être utilisées pour :

• Sécuriser les données

• Mettre à jour le moteur de données

• Dupliquer une base de données de production

• Archiver les données

2.2 Différentes approchesIl existe différentes approches pour effectuer des sauvegardes d'une base de données PostgreSQL :

• La sauvegarde à froid au niveau du système de fichiers

• La sauvegarde à chaud en SQL

• La sauvegarde à chaud en continu

La sauvegarde au niveau système de fichiers permet de sauvegarder une image cohérente des répertoires de données lorsque le cluster est arrêté.

L'utilisation d'outils de snapshots pour effectuer les sauvegardes peut accélérer considérablement les temps de sauvegarde des bases de données.

La sauvegarde SQL permet de créer un fichier texte de commandes SQL contenant le schéma et les données de la base de données.

La sauvegarde à chaud en continu combine une sauvegarde du système de fichier et un archivage des journaux de transactions lui étant associés. Elle est communément appelé PITR, Point In Time Recovery, soit « restauration à un instant donné dans le temps » en français.

Elle convient bien aux bases de données de volumes conséquents ne pouvant pas être arrêtées.

189 / 275 http://www.bull-formation.com

Page 190: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3 Sauvegardes SQL

L'utilitaire pg_dump est utilisé pour effectuer des sauvegardes SQL. Il permet de sauvegarder :

• une base de données

• un ou plusieurs objets d'une base de données

Les sauvegardes créées par pg_dump sont cohérentes. L'outil utilisé pour la restauration des archives est pg_restore.

Les modifications effectuées alors que pg_dump est en cours de fonctionnement ne sont pas dans le fichier de résultat.

pg_dump ne bloque pas les autres opérations sur la base lorsqu'il fonctionne. Néanmoins, il pose un verrou « ACCESS SHARE » sur chaque table à sauvegarder. Il peut donc y avoir une interférence si un utilisateur cherche à acquérir un verrou exclusif sur une des tables sauvegardées, comme lors d'une suppression de table. Les verrous ne sont relachés qu'à la fin de la sauvegarde. Par ailleurs, pg_dump devant avoir une vision cohérente de la base durant toute la durée de son export, il crée une transaction de longue durée, de type SERIALIZABLE, empêchant le recyclage des enregistrements dont il pourrait avoir besoin par vacuum.

Les fichiers texte créés par pg_dump sont prévus pour être lus par le programme psql alors que les fichiers binaires sont relus par le programme pg_restore.

Les outils pg_dump et pg_restore se connectent comme des clients PostgreSQL aux bases de données. Il est donc possible de sauvegarder et/ou restaurer des bases à distance. Il faut néanmoins avoir l'accès à ces bases de données comme pour tout autre client PostgreSQL.

3.1 Sauvegarde avec pg_dump (1/2)Syntaxe de pg_dump avec les options les plus courantes :

pg_dump [ -t <table> ] [ -Fc ] <base> > <fichier>

pg_dump écrit le résultat sur la sortie standard.

190 / 275 http://www.bull-formation.com

Page 191: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

L'option de format -Fc entraîne l'utilisation du plus flexible des formats qui permet à pg_restore de restaurer les tables sélectivement et de ré-ordonner les données chargées et les définitions des objets. Ce format est compressé par défaut.

Par défaut, le format de sortie est le SQL. L'option -Fc permet d'obtenir un fichier dont le format est utilisable par pg_restore. Ce format est également compressé.

3.2 Sauvegarde avec pg_dump (2/2)• Le fichier de sortie peut être compressé à la volée :

pg_dump <base> | gzip > <fichier>

• Le fichier de sortie peut aussi être découpé à la volée :

pg_dump <base> | split -b 100m - <prefix_fichier>

• Il est fortement recommandé d'écrire les fichiers des sauvegardes sur des disques différents de ceux utilisés par la base de données.

3.3 Restauration des archives (1/4)pg_restore est l'outil qui permet de restaurer de manière sélective ou non les sauvegardes effectuées avec l'outil pg_dump dans un format non « plain text ».

• Syntaxe pour l'utilisation de pg_restore avec les options les plus courantes :

pg_restore [ -Fc ] [ -d <base_de_données> ] [ -t <table> ] [ <fichier> ]

• Restauration parallélisée avec l'option -j

Disponible à partir de la version 8.4.

191 / 275 http://www.bull-formation.com

Page 192: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.4 Restauration des archives (2/4)Il est également possible de restaurer les sauvegardes SQL ( « plain text » ) en utilisant l'outil psql :

psql base_de_donnees < fichier_d_entree

3.5 Restauration des archives (3/4)• Pour restaurer une base à partir d'un fichier qui a été compressé, utiliser gunzip combiné à psql :

gunzip -c fichier.gz | psql mabase

• Pour restaurer une base de données à partir de fichiers découpés, utiliser cat combiné à psql :

cat nom_fichier* | psql mabase

3.6 Restauration des archives (4/4)Après la restauration des données, il est recommandé de lancer ANALYZE sur chacune des bases de données afin que l'optimiseur de requêtes dispose de statistiques utiles. Ceci peut être effectué par la commande SQL VACUUM ANALYZE ou l'outil vacuumdb :

vacuumdb -a -z

192 / 275 http://www.bull-formation.com

Page 193: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.7 Migration de donnéesIl est possible de combiner les outils pg_dump et pg_restore ou psql afin de migrer ou de dupliquer une base de données :

pg_dump -h serveur1 base | psql -h serveur2 base

En cas de migration vers une version de PostgreSQL plus récente, il faut toujours utiliser l'outil pg_dump de la version la plus récente.

3.8 Sauvegarder/restaurer un clusterIl est possible de sauvegarder toutes les bases du serveur avec l'outil pg_dumpall :

pg_dumpall > fichier_de_sortie

Pour restaurer toutes les bases, utiliser l'outil psql comme ceci :

psql -f fichier_d_entree postgres

pg_dumpall sauvegarde toutes les bases d'un cluster PostgreSQL en appelant pg_dump pour chaque base de données.

Le script de commandes SQL généré par cette commande contient tous les ordres pour restaurer l'ensemble des bases de données ainsi que les ordres de création des objets globaux commun à toutes les bases tels que les ROLES, USER, GROUP, TABLESPACE et les propriétés qui s'appliquent aux bases de données dans leur ensemble, telles que les droits d'accès.

pg_dump n'exporte pas ces objets globaux.

193 / 275 http://www.bull-formation.com

Page 194: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4 Sauvegarde au niveau système de fichiers

La sauvegarde au niveau système de fichiers consiste à copier tous les fichiers utilisés par PostgreSQL pour enregistrer les données. Tous les outils du système peuvent être utilisés pour effectuer les sauvegardes (tar, cpio, rsync…).

Exemple:

$ tar -cf sauvegarde.tar /var/lib/pgsql/data

Cette méthode tire pleinement son avantage lorsque le système de fichiers permet l'utilisation d'outils de snapshots. Ceci permet en effet de réduire fortement l'interruption de service pour la sauvegarde de la base.

4.1 Limitations• Le serveur de base de données doit être arrêté pour obtenir une

sauvegarde utilisable

• Il est impossible de sauvegarder une base particulière

• Il est impossible de restaurer une donnée séparément du reste

4.2 Image du système de fichiers (1/3)Certains systèmes de fichiers supportent « nativement » de faire des images gelées (snapshots) d'un volume (LVM, ZFS, XFS). Ceci permet de copier le contenu des répertoires de données de PostgreSQL sans arrêter la base, avant de libérer l'image gelée.

194 / 275 http://www.bull-formation.com

Page 195: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.3 Image du système de fichiers (2/3)Avantage:

• L'arrêt du serveur n'est pas nécessaire

4.4 Image du système de fichiers (3/3)Inconvénients:

• Les journaux de transaction sont obligatoires car la base de données redémarre comme après un arrêt violent

• Tous les fichiers doivent être sur le même système de fichiers pour conserver une cohérence au sein du snapshot, ou le système de snapshot doit être capable de déclencher un snapshot cohérent de l'ensemble des volumes, ce que savent faire certaines baies disques (SAN) haut de gamme

4.5 Sauvegarde avec rsyncEn utilisant rsync, il est possible de sauvegarder une grande partie des fichiers à chaud, puis d'arrêter la base de données et sauvegarder les derniers fichiers modifiés avant de re-démarrer la base. L'utilisation de rsync permet de réduire le temps d'interruption de service par rapport à un autre outil d'archivage de type tar ou cpio.

195 / 275 http://www.bull-formation.com

Page 196: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5 Sauvegardes PITR

• Principes

• Avantages

• Limitations

• Recommandations

• Sauvegarde

• Restauration

• Avertissements

5.1 Présentation des XLOG• PostgreSQL maintient des journaux de transaction avec la méthode WAL

(Write Ahead Log). Ils décrivent chaque modification effectuée sur les fichiers de données des bases

• Si le système s'arrête brutalement, la base de données peut être restaurée pour avoir une cohérence des données en « rejouant » les entrées des journaux enregistrés depuis le dernier point de vérification

• Les journaux de transaction sont stockés dans le sous-répertoire pg_xlog du répertoire des données du cluster.*

Chaque journal de transaction fait 16 Mo et est nommé suivant une séquence interne à PostgreSQL. Un nombre suffisant de journaux est créé puis, les journaux devenus inutiles sont «recyclés » en les renommant.

• L'archivage de ces journaux rend possible la reconstruction d'une base de données à partir d'une sauvegarde récente et de l'application des transactions contenues dans ces journaux archivés.*

196 / 275 http://www.bull-formation.com

Page 197: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.2 Avantages (1/2)• Sauvegarde à chaud qui ne nécessite pas d'interruption de service

• Pas besoin d'avoir une sauvegarde parfaitement cohérente comme point de départ. Toute incohérence sera corrigée par la ré-exécution des journaux

• Il est possible d'appliquer une grande séquence de journaux ce qui permet d'espacer les sauvegardes complètes des grosses bases de données

Un système de snapshots n'est donc pas nécessaire, on peut se contenter d'utiliser des outils comme tar ou un autre outil d'archivage.

5.3 Avantages (2/2)• Il est possible de ne rejouer qu'une partie des journaux, ce qui permet

d'obtenir une base de données à n'importe quel temps dans le passé depuis la dernière sauvegarde

• Méthode de sauvegarde/restauration qui occasionne le moins de perte de données puisqu'elle permet de restaurer tout jusqu'aux dernières transactions logguées dans les journaux

Ceci est appelé « récupération à un instant t » ou PITR (*Point In Time Recovery*). Elle est aussi parfois présentée dans le monde des SGBD comme « sauvegarde en continu », puisqu'elle permet de restaurer la base à n'importe quel point dans le temps.

5.4 LimitationsL'utilisation des PITR est une méthode:

• qui ne permet pas la restauration d'un sous-ensemble de données

• qui requiert un grand espace de stockage

• et qui est plus complexe à mettre en place qu'un simple dump ou une sauvegarde complète à froid

197 / 275 http://www.bull-formation.com

Page 198: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.5 RecommandationsSi vous choisissez cette méthode de sauvegarde, il est fortement recommandé de stocker les journaux de transaction archivés séparément :

• sur un disque différent de celui qui contient le cluster PostgreSQL

• sur un disque réseau (NFS, samba)

• directement sur des bandes

5.6 Configurer l'archivagePostgreSQL laisse le soin à l'administrateur de définir la méthode d'archivage des journaux de transaction dans le fichier postgresql.conf. Une simple commande de copie suffit dans la plupart des cas. La directive archive_command peut alors être positionnée comme suit :

archive_command = 'cp -n %p /mnt/archives/%f'archive_command = 'copy "%p" "/mnt/server/archivedir/%f"' # Windows

avec :

• %p le chemin vers les segments archivables

• %f le nom du journal de transaction

Comme la série de journaux de transaction en cours d'archivage contient réellement tout ce qui se trouve dans la base de données, il est préférable de s'assurer que les données archivées sont protégées des autres utilisateurs.

La commande d'archivage doit retourner 0 en cas de réussite, sans quoi le serveur va re-tenter périodiquement jusqu'à ce que la commande réussisse. Elle doit bien sûr ne pas retourner 0 en cas d'échec. De plus elle devrait être généralement conçue pour refuser d'écraser tout fichier archive déjà existant et préserver l'intégrité des archives.

Il peut être important de surveiller le processus d'archivage - notamment lorsqu'on choisit de faire une sauvegarde sur bande - et de faire remonter les problèmes à un opérateur (disque plein, changement de bande…).

198 / 275 http://www.bull-formation.com

Page 199: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.7 Sauvegarde PITR (1/2)Procédure de sauvegarde à chaud :

• Se connecter à la base de données en tant que superutilisateur et lancer la commande suivante :

SELECT pg_start_backup('label');

• Sauvegarder le répertoire $PGDATA (tar, cp …)

où label est toute chaîne utilisée pour identifier de façon unique l'opération de sauvegarde.

Un autre paramètre est disponible, bien qu'optionnel. Le paramètre fast permet d'indiquer si le CHECKPOINT exécuté par cette commande doit se faire rapidement ou pas. Ils feront de toute façon le même travail, mais le lent le diluera suivant checkpoint_completion_target alors que le rapide ne tient pas compte de cette variable.

L'exécution de cette commande provoque un CHECKPOINT. Dans les versions antérieures à la 8.4, cela peut durer au maximum la durée indiquée par checkpoint_timeout. À partir de la 8.4, il faut ajouter un argument booléen pour indiquer si on veut que le CHECKPOINT soit immédiat ou si on veut qu'il attende. Le comportement par défaut est d'attendre, respectant ainsi le comportement des versions antérieures à la 8.4.

La commande crée aussi un fichier dans $PGDATA. Ce fichier s'appelle backup_label et contient à peu près ceci:

guillaume@laptop:~$ cat $PGDATA/backup_labelSTART WAL LOCATION: 8/DE000020 (file 0000000100000008000000DE)CHECKPOINT LOCATION: 8/DE000020START TIME: 2010-01-26 10:49:05 CETLABEL: backup_guillaume_2010_01-26

Cela indique le journal de transaction en cours et l'emplacement du dernier CHECKPOINT dans ce journal.

Il n'est pas nécessaire de copier le sous-répertoire pg_xlog. Toutefois, il est primordial de s'assurer que la sauvegarde inclut tous les fichiers du cluster (attentions aux liens symboliques des tablespaces ou du répertoire des journaux de transactions).

199 / 275 http://www.bull-formation.com

Page 200: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.8 Sauvegarde PITR (2/2)Après la sauvegarde des fichiers, se connecter à la base de données en tant que superutilisateur et lancer la commande suivante :

SELECT pg_stop_backup();

Une fois que les journaux de transaction utilisés durant la sauvegarde sont archivés, la sauvegarde est terminée.

La fonction pg_stop_backup renomme le fichier backup_label en TTTTTTTTSSSSSSSSSSSSSSS.OOOOOOOO.backup (les T indiquant la timeline, les S le segment) et le déplace dans le répertoire pg_xlog. Il ajoute aussi quelques informations dans le fichier:

guillaume@laptop:~$ cat /opt/postgresql-8.4/data/pg_xlog/0000000100000008000000DE.00000020.backupSTART WAL LOCATION: 8/DE000020 (file 0000000100000008000000DE)STOP WAL LOCATION: 8/E197940C (file 0000000100000008000000E1)CHECKPOINT LOCATION: 8/DE000020START TIME: 2010-01-26 10:49:05 CETLABEL: backup_guillaume_2010_01-26STOP TIME: 2010-01-26 10:58:27 CET

Ce fichier sera aussi archivé.

Tous les journaux archivés avec des noms numériquement plus petits ne sont plus nécessaires pour la récupération de la sauvegarde du système de fichiers et peuvent donc être supprimés.

5.9 Restauration PITR (1/3)• Arrêter le serveur s'il est en cours d'exécution

• Archiver les fichier du répertoire pg_xlog

• Effacer tous les fichiers et sous-répertoires de l'ancien cluster PostgreSQL

• Restaurer les fichiers de la base de données à partir de la dernière sauvegarde

• Supprimer les fichiers du sous-répertoire pg_xlog

200 / 275 http://www.bull-formation.com

Page 201: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Conserver le contenu du sous-répertoire pg_xlog du répertoire des données dans un emplacement temporaire car il pourrait contenir des journaux qui n'ont pas été archivés avant l'arrêt du serveur.

Si possible conserver le contenu du cluster actuel ($PG_DATA).

Attention :

• Restaurer les données avec le bon propriétaire et les bons droits.

• Dans le cas d'utilisation de tablespaces, vérifier que les liens symboliques dans pg_tblspc/ ont été correctement restaurés.

Si le répertoire pg_xlog n'a pas été archivé, il faut alors le créer ainsi que le sous-répertoire pg_xlog/archive_status.

5.10 Restauration PITR (2/3)• Créer un fichier de commandes de récupération recovery.conf dans

le répertoire des données. Ce fichier doit contenir au moins la commande de restauration. Exemple :

restore_command = 'cp -n /nfs1/pitr/%f %p'

• Il est possible de spécifier une date (recovery_target_time) ou un numéro de transaction (recovery_target_xid) pour délimiter la fin de la restauration

• Option recovery_end_command (disponible à partir de la 8.4)

Avec :

• %p le chemin absolu

• %f le nom du fichier d'archive

La partie clé de toute la restauration est la configuration du fichier de commandes de récupération. En plus de contenir la commande qui permet de récupérer les journaux de transaction (restore_command), ce fichier permet de spécifier une limite de temps au delà duquel PostgreSQL doit stopper la restauration.

Il est important que la commande renvoie un code de sortie zéro si et seulement si elle a réussi. La commande se verra demander les noms des fichiers absents dans l'archive ; elle doit renvoyer une valeur différente de zéro dans ce cas.

Il n'existe actuellement aucun outil pour récupérer facilement un numéro de transaction particulier.

Cela permet de scripter la suppression du fichier trigger après bascule, ou n'importe

201 / 275 http://www.bull-formation.com

Page 202: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

quelle autre action qu'on voudrait exécuter à la fin de la procédure de récupération.

5.11 Restauration PITR (3/3)• Relancer le serveur PostgreSQL. Le postmaster se trouve en mode

récupération et commence la lecture des journaux de transaction dont il a besoin

• À la fin du processus, le posmaster renomme le fichier recovery.conf en recovery.done

À la fin de la restauration il est conseillé de vérifier l'état des données avant de remettre la base de données en production.

5.12 Outil pglesslog• Problème de la méthode PITR : la place prise sur disque par les

journaux de transactions

• Solution 1 : compresser les journaux à la volée… simple et sûr pour les données (compression non destructive). La compression peut ne pas être très intéressante en terme d'espace disque gagné

• Solution 2 : utiliser pglesslog… la méthode revient à supprimer les pages complètes inutiles. Gain en espace certain, mais compression plus complexe, les journaux étant modifiés par suppression de certaines données inutiles

Avec un journal généré toutes les cinq minutes, cela fait 16 Mo/5 minutes, soit 192 Mo par heure, donc pratiquement 5 Go par jour.

202 / 275 http://www.bull-formation.com

Page 203: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.13 Avertissements• Les opérations sur les index hachés ne sont pas tracées dans les journaux

de transaction

• Ne pas modifier les bases de données modèles (template0, template1) pendant les opérations de sauvegarde

• La création de tablespace est tracée avec les chemins absolus. Il est préférable de faire une nouvelle sauvegarde après chaque création ou suppression de tablespace

Il faut alors indexer manuellement après la restauration.

À noter que les index GiST et GiN n'ont plus ce problème depuis la version 8.1.

5.14 Log Shipping• Problème à la restauration des journaux de transaction : la lenteur

• L'idée est d'avoir un deuxième serveur, qui récupère les journaux de transaction et les ré-exécute immédiatement

• Plusieurs outils existent pour gérer la restauration via le paramètre restore_command

En effet, si la sauvegarde de base date d'une semaine, voire d'un mois, il est nécessaire de rejouer tous les journaux de transaction depuis cette date. Cela peut prendre un certain temps.

Ce serveur, appelé Warm Standby Server, se configure comme pour la restauration, si ce n'est que la commande de restauration ne se termine jamais.

Vous pouvez écrire votre programme, mais Simon Riggs a déjà écrit un module contrib, disponible en 8.3 et appelé pg_standby. L'équipe de Skype a aussi écrit son outil, walmgr.

203 / 275 http://www.bull-formation.com

Page 204: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.15 pg_standby• Outil écrit en C par Simon Riggs

• Disponible en module contrib à partir de la version 8.3

• Nombreuses options en ligne de commande

• Exemple:

restore_command = 'pg_standby -d -s 2 -t /tmp/pgsql.trigger.5432/var/pg_xlog_archives %f %p %r 2>> standby.log'

pg_standby [OPTION …] ARCHIVELOCATION NEXTWALFILE XLOGFILEPATH [RESTARTWALFILE]

ARCHIVELOCATION correspond au répertoire de stockage des journaux de transaction archivés.

NEXTWALFILE est le nom du prochain journal à récupérer.

XLOGFILEPATH est l'emplacement des journaux de transaction.

RESTARTWALFILE est le nom du premier journal nécessaire à la restauration. Les journaux antérieur à ce derniers seront alors supprimés de ARCHIVELOCATION. PostgreSQL est capable de fournir cette information à travers la variable %r.

Options les plus intéressantes:

• -d pour envoyer des informations de débogage sur stderr.

• -s delai entre deux vérifications.

• -t fichier_trigger pour arrêter la vérification.

• -w delai_max, délai maximum avant l'abandon de la récupération.

5.16 walmgr• Outil écrit en Python par la société Skype pour ses besoins propres

• Cet outil s'installe sur les deux serveurs, le maître comme l'esclave

• La configuration des serveurs PostgreSQL n'a pas besoin d'être modifiée

• Plusieurs modes d'exécution: setup, backup, restore, sync et boot

• Attention la documentation est minimale

204 / 275 http://www.bull-formation.com

Page 205: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

La page officielle du projet se trouve sur le site de Skype :

http://pgfoundry.org/projects/skytools

5.17 Recommandations générales• Prendre le temps…

• Tester régulièrement les procédures

• Surveiller l'impact sur les performances

Quel que soit le moyen de sauvegarde choisi, il est essentiel de prendre le temps de se documenter et de tester la solution choisie afin de ne pas avoir de surprises lorsqu'un vrai problème arrive.

Il est essentiel d'écrire des procédures de restauration qui ont été testées et validées.

Attention à bien prendre en considération une éventuelle dégradation de performances du moteur de données lors des opérations de sauvegardes.

205 / 275 http://www.bull-formation.com

Page 206: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6 Outils de sauvegarde externes

Il peut être intéressant de coupler les sauvegardes des bases de données (SQL, sauvegardes des fichiers) avec des outils de sauvegarde. Ceci a plusieurs avantages :

• Archivage des données sur un serveur tiers

• Gestion des sauvegardes (rotation des sauvegardes)

• Facilité pour la restauration des archives

206 / 275 http://www.bull-formation.com

Page 207: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7 Matrice

Simplicité Coupure de service

Restauration

copie à froid facile longue rapide

snapshot FS facile aucune rapide

pg_dump facile aucune lente

rsync + copie à froid

moyen courte rapide

PITR élevée aucune moyen

Warm Standby complexe aucune instantanée

Retrouvez ce tableau dans la base de connaissances de Dalibo :

https://support.dalibo.com/kb/matrice_des_techniques_sauvegardes

207 / 275 http://www.bull-formation.com

Page 208: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

8 Conclusion

• PostgreSQL propose un grand nombre de solutions pour la sauvegarde et la restauration, toutes cohérentes, la plupart à chaud

• PostgreSQL propose même des solutions de réplication grâce au Log Shipping et Log Streaming

8.1 QuestionsN'hésitez pas, c'est le moment !

208 / 275 http://www.bull-formation.com

Page 209: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Travaux Pratiques

209 / 275 http://www.bull-formation.com

Page 210: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Énoncés

1.1 Sauvegardes SQL

1.1.1 Sauvegarde SQL d'une baseSauvegarder la base de données cave au format custom à l'aide de pg_dump dans le fichier : ”/var/lib/pgsql/backups/base_cave.pg_dump”.

1.1.2 Sauvegarde SQL de toutes les basesSauvegarder toutes les bases de données du cluster PostgreSQL à l'aide de pg_dumpall dans le fichier ”/var/lib/pgsql/backups/base_all.pg_dump.gz”.

La sauvegarde doit être zippée.

1.1.3 Sauvegarde SQL de tablesSauvegarder la table stock dans le fichier ”/var/lib/pgsql/backups/table_stock.pg_dump” au format “plain text”.

Créer un script qui sauvegarde toutes les tables d'une base dans des fichiers séparés nommés table_<nom_table>.pg_dump.

1.2 Restaurations SQL

1.2.1 Restauration d'une base de donnéesRestaurer la base de données cave dans une nouvelle base de données nommée cave_2 en utilisant le fichier de sauvegarde “base_cave.pg_dump”. Puis renommer la base de données cave en cave_old et la base de données cave_2 en cave.

1.2.2 Restauration d'une tableÀ partir de la sauvegarde de la partie 1.1, restaurer la table stock.

1.2.3 Migration de donnéesCopier les données de la base cave dans une nouvelle base cave_test.

210 / 275 http://www.bull-formation.com

Page 211: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1.3 Sauvegardes PITR

1.3.1 SauvegardeMettre en place l'archivage des WALs dans ”/var/lib/pgsql/backups/WAL”.

Créer la table suivante :

CREATE TABLE dummy (id serial, libelle text);

Écrire un script qui insère une grande quantité de données dans cette table et vérifier que les fichiers WAL sont bien générés dans le répertoire d'archivage. Laisser le script s'exécuter pendant la durée de la sauvegarde de la base de données.

Sauvegarder la base de données à l'aide d'un utilitaire d'archivage (tar par exemple). À la fin de la sauvegarde, relever l'id du dernier élément inséré dans la table dummy.

Attendre qu'un nouveau fichier de WAL soit engendré dans le répertoire d'archivage, puis arrêter l'insertion des données dans la table dummy. (il est aussi possible de forcer la bascule avec select pg_switch_xlog())

1.3.2 RestaurationRenommer le répertoire ”/var/lib/pgsql/data” en ”/var/lib/pgsql/data.old”.

Restaurer la base de données en utilisant la sauvegarde à chaud et les WALs.

Récupérer l'id du dernier élément inséré dans la table dummy. Vérifier que cet id est supérieur à l'id relevé lors de la fin de la sauvegarde.

1.4 Mise en place du ''Log Shipping''Utiliser un autre PC pour mettre en place le LogShipping. Après quelques actions sur le serveur maître, arrêter le mode de restauration sur l'esclave.

Vérifier que l'ancien esclave a des données à jour.

211 / 275 http://www.bull-formation.com

Page 212: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Solutions

2.1 Sauvegardes SQL

2.1.1 Sauvegarde SQL d'une baseSauvegarder la base de données cave au format custom à l'aide de pg_dump dans le fichier : ”/var/lib/pgsql/backups/base_cave.pg_dump”

Se logguer avec l'utilisateur postgres, puis exécuter la commande suivante :

$ pg_dump -Fc cave > /var/lib/pgsql/backups/base_cave.pg_dump

2.1.2 Sauvegarde SQL de toutes les basesSauvegarder toutes les bases de données du cluster PostgreSQL à l'aide de pg_dumpall dans le fichier : ”/var/lib/pgsql/backups/base_all.pg_dump.gz”

Se logguer avec l'utilisateur postgres, puis exécuter la commande suivante :

$ pg_dumpall | gzip > base_all.pg_dump.gz

2.1.3 Sauvegarde SQL de tablesSauvegarder la table stock dans le fichier ”/var/lib/pgsql/backups/table_stock.pg_dump” :

$ pg_dump -t stock cave > /var/lib/pgsql/backups/table_stock.pg_dump

Créer un script qui sauvegarde toutes les tables d'une base dans des fichiers séparés nommés “table_<nom_table>.pg_dump” :

#!/bin/bashLIST_TABLES=`psql -U caviste -t -c '\dt' cave | awk '{print }'`for _table in $LIST_TABLES; do backup=/var/lib/pgsql/backups/table_$_table.pg_dump pg_dump -t $_table cave > $backupdone

212 / 275 http://www.bull-formation.com

Page 213: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.2 Restaurations SQL

2.2.1 Restauration d'une base de donnéesRestaurer la base de données cave dans une nouvelle base de données nommée cave_2 en utilisant le fichier de sauvegarde base_cave.pg_dump :

$ createdb -O caviste cave2$ pg_restore -Fc -d cave2 /var/lib/pgsql/backups/base_cave.pg_dump

Renommer la base de données cave en cave_old et la base de données cave_2 en cave :

postgres=> ALTER DATABASE cave RENAME TO cave_old;ALTER DATABASEpostgres=> ALTER DATABASE cave2 RENAME TO cave;ALTER DATABASE

2.2.2 Restauration d'une tableÀ partir de la sauvegarde de la partie 1.1, restaurer la table stock :

$ pg_restore -d cave -c -t stock /var/lib/pgsql/backups/base_cave.pg_dump

2.2.3 Migration de donnéesCopier les données de la base cave dans une nouvelle base cave_test :

$ createdb -O caviste cave_test$ pg_dump -Fc cave | pg_restore -d cave_test

2.3 Sauvegardes PITR

2.3.1 SauvegardeToutes les opérations de sauvegarde sont exécutées avec l'utilisateur postgres. Lorsqu'un autre utilisateur est utilisé, ceci est précisé explicitement.

Pour mettre en place l'archivage des WALs dans /var/lib/pgsql/backups/WAL, positionner la variable archive_command comme suit dans le fichier /var/lib/pgsql/data/postgresql.conf :

archive_command = 'cp "%p" /var/lib/pgsql/backups/WAL/"%f"'

1. Créer le répertoire /var/lib/pgsql/backups/WAL :

213 / 275 http://www.bull-formation.com

Page 214: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

$ mkdir /var/lib/pgsql/backups/WAL

2. Puis faire relire la configuration à PostgreSQL (avec l'utilisateur root) :

$ /etc/init.d/postgresql reload

3. Créer la table temporaire dummy :

$ psql -U caviste cave

cave=> CREATE TABLE dummy (id serial, libelle text);

Script qui insère une grande quantité de données dans la table dummy :

#!/bin/bash while truedo

cat <<_QUERY | psql caveINSERT INTO dummy (libelle) SELECT CURRENT_TIMESTAMP - (v ||' minutes')::interval FROM generate_series(1,1000) AS t(v)_QUERY

sleep 1done

4. Vérifier que les fichiers WAL sont bien générés dans le répertoire d'archivage :

$ ls -l /var/lib/pgsql/backups/WAL/

5. Démarrer la sauvegarde :

$ psql postgres

postgres=> SELECT pg_start_backup('backup_YYYY-MM-DD-hh-mm');

6. Sauvegarder la base de données :

$ tar -cvhzf backups/backup_YYYY-MM-DD-hh-mm.tgz data

7. À la fin de la sauvegarde, relever l'id du dernier élément inséré dans la table dummy :

$ psql -U caviste cave

cave=> SELECT MAX(id) FROM dummy;

214 / 275 http://www.bull-formation.com

Page 215: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

8. Arrêter la sauvegarde :

$ psql postgres

postgres=> SELECT pg_stop_backup();

9. Attendre qu'un nouveau fichier de WAL soit généré dans le répertoire d'archivage, puis arrêter l'insertion des données dans la table dummy.

2.3.2 RestaurationToutes les opérations de restauration sont exécutées avec l'utilisateur postgres. Lorsqu'un autre utilisateur est utilisé, ceci est précisé explicitement.

1. Stopper le postmaster :

$ killall postmaster

2. Renommer le répertoire /var/lib/pgsql/data en /var/lib/pgsql/data.old :

$ mv /var/lib/pgsql/data /var/lib/pgsql/data.old

3. Restaurer l'achive de la dernière sauvegarde :

$ cd /var/lib/pgsql$ tar xzvf backups/backup_YYYY-MM-DD-hh-mm.tgz

4. Effacer les anciens journaux :

$ rm -f data/pg_xlog/00*

5. Copier les derniers fichiers de logs du répertoire old :

$ cp data.old/pg_xlog/00* data/pg_xlog

6. Créer le fichier data/recovery.conf contenant les informations suivantes :

restore_command = 'cp /var/lib/pgsql/backups/WAL/"%f" "%p"'

7. Re-démarrer le serveur PostgreSQL (avec l'utilisateur root) :

$ /etc/init.d/postgresql start

8. Vérifier que la restauration est terminée :

215 / 275 http://www.bull-formation.com

Page 216: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

$ ls data/recovery*

On devrait trouver data/recovery.done.

9. Ré-indexer les tables de la base cave :

$ psql cave

cave=> REINDEX DATABASE cave;

10. Vérifier les données et prendre l'id du dernier élément inséré dans la table dummy :

$ psql -U caviste cave

cave=> SELECT MAX(id) FROM dummy;

2.4 Mise en place du ''Log Shipping''1. Mettre en place l'identification SSH sans mot de passe :

$ su - postgres$ ssh-keygen$ scp ~/.ssh/id_rsa.pub postgres@autreserveur:~/$ ssh postgres@pdel0049(saisir le mot de passe)$ mkdir -p ~/.ssh$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys$ rm ~/id_rsa.pub$ exit

2. Créer le répertoire qui va contenir les journaux archivés :

$ ssh root@pdel0049(saisir le mot de passe)$ mkdir -p /datas/shipped_logs$ chown postgres:postgres /datas/shipped_logs$ chmod 700 /datas/shipped_logs$ exit

3. Configurer le fichier postgresql.conf :

archive_command = 'scp %p postgres@autreserveur:/datas/shipped_logs/%f'archive_timeout = 60

4. Rechargement de la configuration :

$ /etc/init.d/postgresql reload

216 / 275 http://www.bull-formation.com

Page 217: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5. Créer la copie de sauvegarde:

$ su - postgres$ psql -c "SELECT pg_start_backup('sauve_1')"$ tar cvj /datas > /datas/pgdatas.tar.bz2$ psql -c "SELECT pg_stop_backup()"

6. Restaurer cette copie de sauvegarde sur le serveur esclave :

$ su - postgres$ scp /datas/pgdatas.tar.bz2 postgres@autreserveur:/datas$ ssh postgres@autreserveur$ cd /$ tar xvfj /datas/pgdatas.tar.bz2$ chown -R postgres:postgres /datas/pg*$ find /datas/pg* -type f -exec chmod 600 '{}' \;$ find /datas/pg* -type d -exec chmod 700 '{}' \;

7. Récupérer l'outil pg_standby

8. Configurer la restauration. Pour cela, ajouter dans le fichier recovery.conf la ligne suivante :

restore_command='pg_standby -d -k 255 -t /tmp/recoverystop.file /datas/shipped_logs %f %p 2>> standby.log'

9. Lancer le serveur esclave :

$ pg_ctl start

10. Vérifier que la réplication a bien lieu :

$ tail -f /logs/pg_standby.log

11. Arrêter la restauration :

$ touch /tmp/recoverystop.file

217 / 275 http://www.bull-formation.com

Page 218: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

218 / 275 http://www.bull-formation.com

Page 219: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

PostgreSQL : Monitoring

219 / 275 http://www.bull-formation.com

Page 220: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Introduction

• La visualisation est cruciale

• 2 approches (modules vs. « tout-en-un »)

• Rétro-analyse (pgFouine / pgSnap)

L'administrateur de base de donnée est responsable de la mise en place d'un système de surveillance.

Une bonne politique de monitoring est la clef de voûte d'un système pérenne.

Deux philosophies de monitoring s'affrontent :

• L'approche « tout-en-un » vise à utiliser un logiciel unique (Zabbix par exemple), chargé de tous les aspects du monitoring.

• L'approche « modulaire » privilégie l'utilisation de plusieurs petits programmes, chacun prenant en charge une tâche précise.

En général, on considère que la seconde approche est plus adaptée au monitoring d'un serveur unique. À contrario, l'approche « tout-en-un » se révèle plus avantageuse dans le cadre de la surveillance d'un parc informatique important.

En complément, des outils permettent de visualiser l'état de la base a posteriori, soit en se basant sur les journaux applicatifs (logs), soit en scrutant les tables systèmes.

1.1 Licence Creative Commons CC-BY-NC-SAVous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Cette formation (diapositives, manuels et travaux pratiques) est sous licence CC-BY-NC-SA.

Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :

220 / 275 http://www.bull-formation.com

Page 221: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• Paternité

• Pas d'utilisation commerciale

• Partage des conditions initiales à l'identique

Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'œuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'œuvre).

Vous n'avez pas le droit d'utiliser cette création à des fins commerciales.

Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.

À chaque réutilisation ou distribution de cette création, vous devez faire apparaître clairement au public les conditions contractuelles de sa mise à disposition. La meilleure manière de les indiquer est un lien vers cette page web.

Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits sur cette œuvre.

Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.

Le texte complet de la licence est disponible à cette adresse: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode

221 / 275 http://www.bull-formation.com

Page 222: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Plan

• Partie 1 : Politique de suivi

• Partie 2 : Statistiques

• Partie 3 : Analyse des journaux applicatifs

• Partie 4 : Visualisation

• Partie 5 : Surveillance

222 / 275 http://www.bull-formation.com

Page 223: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3 Partie 1 : Politique de suivi

Appelée aussi monitoring.

• Pourquoi ?

• Qui ?

• Quels critères ?

• Quels outils ?

Pourquoi ? Il est nécessaire de définir les objectifs de la surveillance : détecter les problèmes de performance, prévenir les pannes, remonter les alertes en cas de problème.

Qui ? Déterminer les acteurs impliqués dans la surveillance du système.

Quels critères ? Déterminer les bons indicateurs de l'état de santé du système (CPU, mémoire, accès disques…).

Quels outils ? Choisir les bons logiciels parmi le panel de solutions.

3.1 Objectifs du suivi• Améliorer les performances

• Améliorer l'applicatif

• Anticiper

• Prévenir les incidents

• Réagir vite en cas de crash

• Investiguer

Lors d'une phase d'optimisation, il est essentiel de disposer d'outils pour mesurer les gains de performance.

La surveillance du système permet de corriger des erreurs au sein du code middleware par exemple en repérant des cas de mauvaise gestion de connexions ou en identifiant les requêtes lentes (slow queries).

Un suivi régulier des statistiques du serveur – notamment la volumétrie et le nombre de connexions – permet de prévoir les évolutions nécessaires du système : achat de

223 / 275 http://www.bull-formation.com

Page 224: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

matériel, adaptations du code applicatif, création d'index, etc…

Les solutions de monitoring évoluées (Nagios, Zabbix) permettent de surveiller PostgreSQL et de déclencher des alertes (par e-mail, SMS…) de manière préventive.

Les statistiques, les journaux applicatifs et les graphes sont particulièrement utiles en cas de panne du serveur. Ils permettent d'isoler rapidement la nature du problème et accélèrent la résolution des incidents.

PostgreSQL dispose d'outils internes (EXPLAIN ANALYZE) et externes (PgFouine) pour analyser puis corriger les erreurs et les contre-performances.

3.2 Utilisateurs concernés• Développeur (debug, tuning)

• Administrateur système (surveillance, qualité de service)

• DBA / Expert PG (maintenance, évolutions, réparation)

Le développeur doit pouvoir visualiser l'activité de la base de données. Il peut ainsi comprendre l'impact du code applicatif sur la base. En outre, il peut être amené à analyser certaines requêtes SQL afin de les optimiser.

Typiquement, le développeur doit avoir accès aux graphes de Munin et à l'outil PgFouine.

L'administrateur système est chargé de la qualité du service. Pour garantir la disponibilité du serveur, il configure et utilise un outil d'alerte tel que Nagios ou Zabbix.

L'administrateur de la base de données est garant des performances de la base de données. Il analyse les statistiques contenues dans les tables systèmes et peut également utiliser PgFouine pour faire un audit des requêtes les plus coûteuses.

224 / 275 http://www.bull-formation.com

Page 225: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.3 Indicateurs à surveiller (1/4)Il est intéressant de surveiller les indicateurs suivants pour garantir de bonnes performances pour le système :

• le nombre de connexions ;

• les entrées/sorties sur le disque ;

• la charge du CPU ;

• l'utilisation de la RAM ;

• les requêtes fréquentes (temps cumulé d'exécution élevé).

• les requêtes lentes (temps unitaire d'exécution élevé).

3.4 Indicateurs à surveiller (2/4)Indicateurs à surveiller pour garantir la disponibilité du service :

• espace disque disponible ;

• utilisation des disques ;

• visualiser les verrous.

Pour plus d'information concernant la consommation d'espace disque, la documentation officielle donne un ensemble de requêtes sur le catalogue système. Voir http://docs.postgresql.fr/current/diskusage.html

3.5 Indicateurs à surveiller (3/4)Indicateurs à surveiller pour les DBA PostgreSQL :

• la volumétrie ;

• les requêtes lentes ou exécutées très souvent ;

• le ratio lecture/écriture ;

• le ratio cache hit/miss.

225 / 275 http://www.bull-formation.com

Page 226: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.6 Indicateurs à surveiller (4/4)Il est intéressant de mettre en place des alertes dans les cas suivants :

• sur-activité ou non-activité du serveur ;

• seuil d'occupation du disque atteint (90%) ;

• temps de réponse du serveur trop long.

3.7 Outils internesPostgreSQL propose un certain nombre d'indicateurs :

• les tables système ;

• les vues système ;

• les fonctions ;

• les logs d'activité.

PostgreSQL stocke un ensemble d'informations (métadonnées des schémas, informations sur les tables et les colonnes, données de suivi interne, etc.) dans des tables système qui peuvent être consultées par les administrateurs.

PostgreSQL fournit également des vues combinant des informations puisées dans différentes tables systèmes. Ces vues simplifient le suivi de l'activité de la base.

Une des vues les plus utiles pour surveiller l'activité des bases de données est pg_locks. Elle permet à l'administrateur système de visualiser des informations sur les verrous restant dans le gestionnaire des verrous.

PostgreSQL propose un éventail de fonctions pré-enregistrées qui facilitent la remontée d'informations. Par exemple, la fonction pg_size_pretty() est là pour donner un affichage « humain » (comme la commande unix df -h par exemple).

PostgreSQL est capable de tracer un grand nombre d'informations qui peuvent être exploitées pour surveiller l'activité de la base de données.

Attention toutefois à ne pas tracer trop d'informations en production car ceci pourrait affecter les performances générales du système.

226 / 275 http://www.bull-formation.com

Page 227: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

3.8 Outils externes• analyseur : PgFouine ;

• visualisation : Munin ;

• alertes : Nagios ;

• visualisation + alertes : Zabbix.

• Windows : http://www.microsoft.com/technet/sysinternals/

pgFouine est un analyseur de journaux applicatifs utilisé pour produire des rapports détaillés à partir d'un journal de PostgreSQL. Il peut aider à déterminer les requêtes à optimiser pour améliorer les performances de l'application basée sur PostgreSQL.

Munin est une application client/serveur de métrologie. Elle recueille les informations sur chacune des machines à surveiller et présente toutes les informations rapatriées sous forme graphique dans une interface web.

Nagios est un outil de surveillance réseau. Il utilise SNMP et permet de faire remonter des alertes aux opérateurs.

Zabbix est une solution de surveillance de haut niveau qui offre des fonctionnalités de monitoring, d'alertes et de visualisation.

3.9 Pré-requisPour assurer les tâches de suivi de la base de données, il faut au minimum :

• Sauvegarder les journaux applicatifs ;

• Collecter des statistiques.

PostgreSQL supporte plusieurs méthodes pour la journalisation des messages du serveur, dont la sortie d'erreur (stderr), syslog, eventlog (journal des événements spécifique à Windows) et csvlog. Par défaut, seule la sortie stderr est utilisée.

PostgreSQL dispose d'un collecteur de statistiques qui fournit des rapports d'information sur l'activité du serveur. Actuellement, le récupérateur peut compter les accès aux tables et index à la fois en terme de blocs disque et de lignes individuelles. Les statistiques sont stockées dans des tables systèmes.

227 / 275 http://www.bull-formation.com

Page 228: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4 Partie 2 : Statistiques

Sont abordés les points suivants :

• configuration ;

• visualisation des statistiques ;

• fonctions d'accès aux statistiques.

Le récupérateur de statistiques de PostgreSQL rapporte des informations sur l'activité du serveur. Il peut compter l'accès aux tables et index en terme de blocs disques et de lignes individuelles. Il permet également de déterminer la commande en cours d'exécution par les processus serveur.

4.1 Statistiques : configuration• track_activities

• Les paramètres suivants contrôlent la quantité d'informations réellement envoyées au récupérateur :

• update_process_title

• track_counts

track_activities permet de récupérer les informations d'activité, principalement disponibles dans la table “pg_stat_activity”.

update_process_title active la récupération des statistiques sur les commandes en cours d'exécution par chaque session. Pour des raisons de sécurité, ces statistiques ne sont visibles que pour les super utilisateurs et pour le propriétaire de la session. Anciennement stats_command_string jusqu'à la version 8.3.

track_counts active les statistiques d'accès au niveau des lignes et des blocs disques. Si cette option est activée, les données produites sont accessibles via la famille de vues système pg_stat et pg_statio. Anciennement stats_block_level et stats_row_level jusqu'à la version 8.3.

228 / 275 http://www.bull-formation.com

Page 229: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.2 Statistiques : visualisation (1/7)• pg_stat_activity

• pg_stat_replication

• pg_stat_bgwriter

• pg_stat_database

• pg_stat_database_conflicts

Plusieurs vues prédéfinies sont disponibles pour afficher les résultats de la récupération de statistiques :

pg_stat_activity : Statistiques sur les processus du moteur de données.

Une ligne par processus serveur, affichant l'OID de la base de données, le nom de la base, l'ID du processus, l'OID de l'utilisateur, son nom, la requête en cours, le fait que le processus en est attente de la libération d'un verrou, le moment où a débuté la transaction, le moment où a commencé l'exécution de la requête, le moment où le client s'est connecté, ainsi que l'adresse et le numéro de port du client.

La taille maximum de la requête dépend de la variable track_activity_query_size.

pg_stat_replication : Statistiques sur les esclaves d'un serveur maître

Cette statistique apparaît avec la version 9.1.

pg_stat_bgwriter :

Une seule ligne donnant des statistiques pour tout le cluster sur l'activité du processus d'écriture en tâche de fond : nombre de points de vérification planifiés par PostgreSQL, nombre de points de vérification demandés, tampons écrits par les points de vérification et par les passes de nettoyage, et le nombre de fois où le processus d'écriture en tâche de fond a stoppé une passe de nettoyage parce qu'il a écrit trop de tampons. La vue inclut aussi des statistiques sur les tampons partagés: le nombre de tampons écrits par les processus serveur (c'est-à-dire par autre chose que le processus d'écriture en tâche de fond, et donc susceptibles d'engendrer une attente perceptible par un utilisateur) et le nombre total de tampons alloués.

Disponible à partir de la version 8.3.

pg_stat_database : Statistiques générales sur les bases de données du cluster.

Une ligne par base de données, affichant l'OID de la base de données, son nom, le nombre de processus serveur actifs connectés à cette base, le nombre total de transactions validées et le nombre de celles qui ont été annulées, le nombre total de blocs lus par le système d'exploitation (du disque ou du cache système), et le nombre total de blocs lus du cache PostgreSQL.

229 / 275 http://www.bull-formation.com

Page 230: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

pg_stat_database_conflicts : Statistiques sur les conflits entre l'application de la réplication et l'exécution des requêtes en lecture seule sur les esclaves.

Cette statistique apparaît avec la version 9.1.

4.3 Statistiques : visualisation (2/7)• pg_stat_all_tables

• pg_stat_sys_tables

• pg_stat_user_tables

Plusieurs vues prédéfinies sont disponibles pour afficher les résultats de la récupération de statistiques :

pg_stat_all_tables : Statistiques sur les tables de la base courante.

Pour chaque table dans la base de données en cours, l'OID de la table, le nom du schéma et de la table, le nombre de parcours séquentiels réalisés, le nombre de lignes actives récupérées par ces parcours séquentiels, le nombre de parcours d'index réalisés, le nombre de lignes actives récupérées par ces parcours d'index et le nombre d'insertions, mises à jour et suppressions de lignes.

pg_stat_sys_tables : Statistiques sur les tables utilisateurs. Type d'informations identiques à pg_stat_all_tables, mais pour les tables système uniquement.

pg_stat_user_tables : Statistiques sur les tables utilisateurs. Type d'informations identiques à pg_stat_all_tables, mais pour les tables utilisateurs uniquement.

4.4 Statistiques : visualisation (3/7)• pg_stat_all_indexes

• pg_stat_sys_indexes

• pg_stat_user_indexes

Plusieurs vues prédéfinies sont disponibles pour afficher les résultats de la récupération de statistiques :

pg_stat_all_indexes : Informations générales sur l'utilisation des index. Pour chaque index de la base de données en cours, l'OID de la table et de l'index, le nom du schéma, de la table et de l'index, le nombre de parcours d'index initiés sur cet index, le nombre d'entrées de l'index renvoyées par ces parcours d'index, et le nombre de lignes actives de table récupérées par ces parcours d'index.

230 / 275 http://www.bull-formation.com

Page 231: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

pg_stat_sys_indexes : Statistiques sur l'utilisation des index des tables système. Le type d'informations est identique à pg_stat_all_indexes, mais pour les index des tables système uniquement.

pg_stat_user_indexes : Statistiques sur l'utilisation des index des tables utilisateurs. Le type d'informations est identique à pg_stat_all_indexes, mais pour les index des tables utilisateurs uniquement.

La colonne idx_scan est particulièrement intéressante. Si elle vaut 0, c'est que l'index n'est jamais utilisé, donc à priori un index inutile (à condition que ça ne soit pas un index unique ou de clé primaire).

4.5 Statistiques : visualisation (4/7)• pg_statio_all_tables

• pg_statio_sys_tables

• pg_statio_user_tables

Plusieurs vues prédéfinies sont disponibles pour afficher les résultats de la récupération de statistiques pour les I/O :

pg_statio_all_tables : Statistiques relatives aux I/O effectuées pour chacune des tables de la base courante.

Pour chaque table de la base de données en cours (ceci incluant les tables TOAST), l'OID de la table, le nom du schéma et de la table, le nombre de blocs : de table lus du disque ou du cache système, de table lus du cache PostgreSQL, d'index lus du disque ou du cache système, d'index lus du cache PostgreSQL, et les mêmes statistiques pour la table TOAST associée à la table principale (si cette table TOAST existe).

pg_statio_sys_tables : Statistiques relatives aux I/O effectués pour chacune des tables système. Le type d'informations disponibles est identique à la vue pg_statio_all_tables mais pour les tables système uniquement.

pg_statio_user_tables : Statistiques relatives aux I/O effectuées pour chacune des tables utilisateurs. Le type d'informations disponibles est identique à la vue pg_statio_all_tables mais pour les tables utilisateurs uniquement.

231 / 275 http://www.bull-formation.com

Page 232: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

4.6 Statistiques : visualisation (5/7)• pg_statio_all_indexes

• pg_statio_sys_indexes

• pg_statio_user_indexes

Plusieurs vues prédéfinies sont disponibles pour afficher les résultats de la récupération de statistiques pour les I/O :

pg_statio_all_indexes : Statistiques relatives aux I/O effectuées pour chacun des index de la base de données courante.

Pour chaque index de la base de données en cours, l'OID de la table et de l'index, le nom du schéma, de la table et de l'index, le nombre de blocs lus du disque ou du cache du système d'exploitation, et le nombre de blocs lu du cache PostgreSQL.

pg_statio_sys_indexes : Statistiques relatives aux I/O effectuées pour chacun des index des tables système. Type d'information identique à la vue pg_statio_all_indexes mais pour les index des tables système uniquement.

pg_statio_user_indexes : Statistiques relatives aux I/O effectuées pour chacun des index des tables utilisateurs. Type d'information identique à la vue pg_statio_all_indexes mais pour les index des tables utilisateurs uniquement.

4.7 Statistiques : visualisation (6/7)• pg_statio_all_sequences

• pg_statio_sys_sequences

• pg_statio_user_sequences

Plusieurs vues prédéfinies sont disponibles pour afficher les résultats de la récupération de statistiques pour les I/O :

pg_statio_all_sequences : Statistiques relatives aux I/O effectuées pour chacune des séquences.

Pour chaque séquence de la base de données en cours, l'OID de la séquence, le nom du schéma et de la séquence, le nombre de blocs lus du disque ou du cache du système d'exploitation, et le nombre de blocs lus du cache PostgreSQL.

pg_statio_sys_sequences : Statistiques relatives aux I/O effectuées pour chacune des séquences système. Type d'information identique à la vue pg_statio_all_sequences mais pour les séquences système.

232 / 275 http://www.bull-formation.com

Page 233: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

pg_statio_user_sequences : Statistiques relatives aux I/O effectuées pour chacune des séquences utilisateurs. Type d'information identique à la vue pg_statio_all_sequences mais pour les séquences utilisateurs.

4.8 Statistiques : visualisation (7/7)• pg_stat_user_functions

Disponible à partir de la version 8.4, pg_stat_user_functions contient des statistiques sur les fonctions utilisées.

Une ligne par fonction utilisée, affichant l'OID de la fonction, le nom du schéma, le nom de la fonction, le nombre d'appels de la fonction, la durée d'exécution totale (fonction et fonctions appelées), la durée d'exécution de la fonction seule.

4.9 Statistiques : visualisation• Les vues ne sont pas des « images instantanées »

• PGSTAT_STAT_INTERVAL = 500ms, par défaut

Il est important de savoir que l'information n'est pas mise à jour instantanément. Chaque processus serveur individuel transmet le nouveau nombre d'accès au niveau des blocs et des lignes au récupérateur juste avant l'attente d'une nouvelle commande du client.

De plus, le récupérateur émet lui-même un nouveau rapport une fois par PGSTAT_STAT_INTERVAL millisecondes. Cette valeur est définie à la compilation de PostgreSQL.

4.10 Stats : commandes• pg_stat_get_db_numbackends()

• pg_stat_get_db_xact_commit() et pg_stat_get_db_xact_rollback()

• pg_stat_get_db_blocks_fetched() et pg_stat_get_db_blocks_hit()

233 / 275 http://www.bull-formation.com

Page 234: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Un grand nombre de fonctions sont disponibles pour accéder aux statistiques de la base.

Parmi ces fonctions, on pourra trouver les statistiques générales de la base de données avec les fonctions suivantes :

• pg_stat_get_db_numbackends : nombre de processus actifs

• pg_stat_get_db_xact_commit et pg_stat_get_db_xact_rollback : nombre de transactions validées et annulées

• pg_stat_get_db_blocks_fetched et pg_stat_get_db_blocks_hit : nombre de récupérations de blocs disque, et de blocs disque trouvés dans le cache.

Exemple de requête utilisée pour afficher les PID et les requêtes en cours pour tous les processus serveur :

SELECT pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_activity(s.backendid) AS current_query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;

234 / 275 http://www.bull-formation.com

Page 235: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5 Partie 3 : analyse de logs

• Configuration des traces

• Exemples

• pgFouine

• Les alternatives à pgFouine

5.1 Configuration : où tracer ?• log_destination : stderr, csvlog et syslog

• logging_collector :

• log_directory, log_filename

• log_file_mode

• log_rotation_age, log_rotation_size, log_truncate_on_rotation

• syslog_facility, syslog_ident

Paramètres de configuration relatifs à la production de journaux applicatifs :

log_destination : stderr et syslog envoient les logs sur la sortie d'erreur ou syslog respectivement. cvslog permet d'envoyer les logs en format CSV sur la sortie d'erreur.

Le logging_collector permet de capturer les traces dans log_filename situé dans log_directory avec une rotation selon les limites d'age et de taille log_rotation_age et log_rotation_size. Si l'option log_truncate_on_rotation est activée, un journal applicatif existant avec le même nom que le nouveau journal à créer est tronqué au lieu de continuer à écrire à la fin. log_file_mode permet de préciser les droits du journal applicatif (ce paramètre apparaît avec la version 9.1).

syslog_facility et syslog_ident permettent, par ailleurs, de configuration de l'utilisation de syslog pour tracer les informations (si log_destination est positionné à syslog).

235 / 275 http://www.bull-formation.com

Page 236: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.2 Configuration : quand tracer ?• client_min_messages, log_min_messages

• log_error_verbosity

• log_min_error_statement

• log_autovacuum_min_duration

• log_min_duration_statement

• silent_mode

Ces paramètres sont utilisés pour déterminer quand les informations doivent être logguées :

Les paramètres client_min_messages et log_min_messages permettent de définir le niveau de messages minimum à partir duquel il faut logguer les informations. Les valeurs valides sont DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL et PANIC.

Le niveau de détails écrits dans les logs pour chaque message d'erreur tracé est contrôlé par le paramètre log_error_verbosity. Une instruction SQL ayant causé une erreur sera enregistrée dans le journal des traces si sa criticité dépasse le seuil défini par log_min_error_statement, les valeurs valides étant DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL et PANIC.

PostgreSQL peut aussi tracer les requêtes selon leur temps d'exécution. log_autovacuum_min_duration permet de tracer les actions exécutées par le processus autovacuum si le temps passé dépasse le seuil indiqué en millisecondes. log_min_duration_statement permet de tracer les ordres SQL dont le temps d'exécution dépasse le seuil indiqué en millisecondes.

Enfin, le silent_mode exécute le serveur silencieusement. Dans ce mode les sorties standard et d'erreur sont redirigées dans le fichier postmaster.log créé à la racine du répertoire de données.

236 / 275 http://www.bull-formation.com

Page 237: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.3 Configuration : que tracer ?• log_connections et log_disconnections

• log_duration

• log_line_prefix

• log_statement

• log_hostname

• log_checkpoints

• log_lock_waits

• log_temp_files

Les paramètres log_connections et log_disconnections permettent de tracer les connexions réussies et les déconnexions. Si log_duration est positionné à true, la durée d'exécution d'une instruction satisfaisant log_statement est tracée.

Une chaîne de caractère peut être ajouté au début de chacune des lignes de traces, log_line_prefix permet de spécifier cette chaîne qui peut inclure des jokers. log_hostname permet d'utiliser le nom d'hôte plutôt que l'adresse IP.

Enfin, le paramètre log_statement permet de choisir le type d'instruction à tracer, les valeurs valides étant ddl, mod et all. On peut aussi tracer l'activité du processus d'écriture en tâche de fond avec log_checkpoints, l'attente sur les verrous si une session attend un verrou plus que deadlock_timeout avec log_lock_waits ou la création de fichiers temporaires dont la taille dépasse le seuil (en ko) indiqué par log_temp_files.

5.4 Configuration : activer syslogActiver syslog dans le fichier postgresql.conf :

log_destination = 'syslog'logging_collector = offsilent_mode = on

237 / 275 http://www.bull-formation.com

Page 238: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.5 Configuration : activer les tracesTracer la durée de chaque requête, deux possibilités :

• Durée et requête, chacun sur une ligne :

log_duration = onlog_statement = 'all'

• Durée et requête sur la même ligne :

log_min_duration_statement = 0

En activant log_duration avec log_statement à all, on trace toutes les requêtes avec leur durée, par exemple :

LOG: statement: select true;LOG: duration: 43.060 ms

Si on configure log_min_duration_statement à zéro (pour tracer les requêtes qui s'exécutent durant plus de 0 ms, par conséquent toutes les requêtes), on obtient des traces de ce type :

LOG: duration: 0.931 ms statement: select true;

5.6 Configuration : exempleTracer les requêtes dont la durée d'exécution dépasse une minute :

log_min_duration_statement = 60000log_duration = offlog_statement = 'none'

238 / 275 http://www.bull-formation.com

Page 239: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.7 pgFouine : présentationpgFouine est un analyseur de journaux applicatifs utilisé pour générer des rapports détaillés à partir :

• d'un journal applicatif de PostgreSQL ;

• des sorties générées par la commande VACUUM ANALYZE.

Il peut aider à déterminer quelles sont les requêtes à optimiser pour améliorer les performances de l'application utilisant PostgreSQL.

pgFouine est un projet sous licence GPL très actif. Le site officiel se trouve sur http://pgfouine.projects.postgresql.org

5.8 pgFouine : utilisationSyntaxe :

pgfouine.php -file postgresql.log > analyse.html

Voici une liste des options les plus utiles:

• -file <file> : fichier à analyser

• -top <n> : nombre de requêtes à afficher

• -format <format> : format de sortie (html, html-with-graphs ou text)

• -logtype <logtype> : type de journaux applicatifs (syslog ou stderr)

• -database <database> : choix de la base à analyser.

239 / 275 http://www.bull-formation.com

Page 240: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.9 pgFouine : copie d'écran

240 / 275 http://www.bull-formation.com

Page 241: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.10 pgFouine : copie d'écran

5.11 Analyse de requêtes : PQA• PostgreSQL Query Analyser

• Codé en Ruby, Licence BSD

• Moins évolué que pgFouine

• Fonctionne également avec MySQL

L'avantage de PQA est sa simplité, mais c'est aussi sa limite !

L'installation peut se faire via RubyGems :

241 / 275 http://www.bull-formation.com

Page 242: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

gem install pqa-1.6.gem

Ensuite, on utilise l'outil en ligne de commande de cette façon :

[tom@hal lib]$ ./pqa.rb -file postgresql.log -normalize -top 5645 queries (65 unique), longest ran in 0.370524 seconds), parsed in 0.088793 seconds### Queries by typeSELECTs: 593 (92%)INSERTs: 51 (8%)UPDATEs: 1 (0%)### 5 most frequent queries61 times: SELECT total FROM forum_group_list_vw WHERE group_forum_id=''46 times: SELECT plugin_id, plugin_name FROM plugins46 times: INSERT INTO activity_log (day,hour,group_id) VALUES (0,'','');40 times: SELECT language_code FROM supported_languages WHERE language_id=''

Plus d'informations sur la page du projet : http://pqa.projects.postgresql.org/

5.12 Analyse de requêtes : EPQA• Enterprise PostgreSQL Query Analyser

• Codé en PERL, Licence GPL

• Même type de rapport que PQA

• Bonne gestion des logs compressés (gz)

EPQA est codé en Perl, il est donc très simple de le modifier pour adapter les rapports d'analyse.

L'utilisation est très simple

./epqa.pl -f=postgresql.log > rapport.html

On obtient alors un fichier HTML succinct contenant le résultat de l'analyse des logs.

Plus d'information sur : http://epqa.sourceforge.net

242 / 275 http://www.bull-formation.com

Page 243: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

5.13 Analyse de requêtes : pgsi• PostgreSQL System Impact

• Codé en Perl, Licence BSD

• Moins évolué que pgFouine

• Crée des rapports au format wiki

L'avantage de pgsi est sa simplicité, mais c'est aussi sa limite !

Il nécessite des journaux applicatifs au format syslog. Plus exactement, voici le format exact:

YYYY-MM-DDTHH24:MI:SS(-TZ:00)? server postgres[pid]:

Cet outil permet de calculer la charge moyenne pour les requêtes. Voici un exemple de sortie:

Best1. 2009-01-12T10:11:49-07:00 db1 postgres[4692] -- 4.833 ms2. 2009-01-12T10:31:19-07:00 db1 postgres[1937] -- 4.849 ms3. 2009-01-12T09:16:20-07:00 db1 postgres[20294] -- 4.864 ms4. 2009-01-12T10:16:54-07:00 db1 postgres[20955] -- 4.867 ms5. 2009-01-12T10:32:16-07:00 db1 postgres[5010] -- 4.871 ms

Worst1. 2009-01-12T10:00:07-07:00 db1 postgres[2804] -- 2175.650 ms2. 2009-01-12T09:30:07-07:00 db1 postgres[2804] -- 2090.914 ms3. 2009-01-12T10:00:18-07:00 db1 postgres[2804] -- 2046.608 ms4. 2009-01-12T09:30:10-07:00 db1 postgres[2804] -- 1954.604 ms5. 2009-01-12T11:20:11-07:00 db1 postgres[2804] -- 1788.576 ms

Plus d'informations sur : http://bucardo.org/pgsi/

5.14 pg_stat_statements• Module contrib apparaissant en 8.4

• Se base sur les requêtes en cours d'exécution

• Permet de connaître rapidement les requêtes les plus fréquentes

• Quelques paramètres de configuration

Voici un exemple de requête sur la vue pg_stat_statements :

243 / 275 http://www.bull-formation.com

Page 244: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

postgres=# SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 3;-[ RECORD 1 ]------------------------------------------------------------userid | 10dbid | 63781query | UPDATE branches SET bbalance = bbalance + WHERE bid = ;calls | 3000total_time | 20.716706rows | 3000-[ RECORD 2 ]------------------------------------------------------------userid | 10dbid | 63781query | UPDATE tellers SET tbalance = tbalance + WHERE tid = ;calls | 3000total_time | 17.1107649999999rows | 3000

pg_stat_statements possède des paramètres de configuration pour indiquer le nombre maximum d'instructions tracées, la sauvegarde des statistiques entre chaque démarrage du serveur, etc.

5.15 Alertes à partir des journaux applicatifs• Tail and Mail

• Codé en Perl, Licence BSD

• Analyse en continu les journaux applicatifs

• Envoie des mails lorsqu'il détecte certains cas

L'idée est de laisser cet outil chercher certaines conditions dans les journaux applicatifs.

Voici un exemple de configuration:

## Fichier de configuration pour le programme tail_n_mail.plEMAIL: [email protected]

FILE: /var/log/pg_log/postgres-%Y-%m-%d.logINCLUDE: FATAL: INCLUDE: PANIC: EXCLUDE: database ".+" does not existEXCLUDE: database "template0" is not currently accepting connectionsMAILSUBJECT: HOST Postgres fatal errors (FILE)

Ensuite, il faut configurer le démon cron pour qu'il exécute le programme tail_n_mail.pl suivant la planification:

*/5 * * * * perl bin/tail_n_mail.pl bin/tnm/tnm.fatals.config

Voici un exemple de mail envoyé:

244 / 275 http://www.bull-formation.com

Page 245: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Matches from /var/log/pg_log/postgres-2010-01-01.log: 42Date: Fri Jan 1 10:34:00 2010Host: pollo

[1] Between lines 123005 and 147976, occurs 39 times.First: Jan 1 00:00:01 rojogrande postgres[4306]Last: Jan 1 10:30:00 rojogrande postgres[16854]Statement: user=root,db=rojogrande FATAL: password authentication failed foruser "root"

[2] Between lines 147999 and 148213, occurs 2 times.First: Jan 1 10:31:01 rojogrande postgres[3561]Last: Jan 1 10:31:10 rojogrande postgres[15312]Statement: FATAL main: write to worker pipe failed -(9) Bad file descriptor

[3] (from line 152341)PANIC: could not locate a valid checkpoint record

Plus d'informations sur :

http://bucardo.org/wiki/Tail_n_mail

245 / 275 http://www.bull-formation.com

Page 246: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6 Partie 4 : visualisation

Il existe plusieurs outils pour visualiser les informations collectées sur un système :

• Munin

• Zabbix

• Autres pistes

6.1 Visualisation avec Munin

• Munin est une application de métrologie client/serveur.

• Le site officiel se trouve sur http://munin.projects.linpro.no

Il recueille les informations sur chacune des machines à surveiller et présente toutes les informations rapatriées sous forme graphique dans une interface web.

Munin est un projet disponible sous licence GPL écrit en langage Perl.

6.2 Avantages de MuninMunin est un outil:

• Simple

• Efficace

• Rapide

Il existe des plugins pour PostgreSQL disponibles sur http://www.dalibo.org

246 / 275 http://www.bull-formation.com

Page 247: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.3 Munin : copie d'écran

247 / 275 http://www.bull-formation.com

Page 248: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.4 Munin : copie d'écran

6.5 Visualisation : autres pistes• Cacti : http://cacti.net/

• Nisca (Network Interface Statistics Collection Agent) : http://nisca.sourceforge.net/

• Orca : http://www.orcaweb.com/

248 / 275 http://www.bull-formation.com

Page 249: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.6 Visualisation avec Zabbix

• Zabbix est une solution de surveillance de haut niveau qui offre des fonctionnalités de monitoring, d'alertes et de visualisation.

• Zabbix est un projet distribué sous licence GPL écrit en PHP. Le site officiel se trouve sur : http://www.zabbix.com

Il existe des sondes pour PostgreSQL, appelés PostBIX. Voir http://www.smartmarmot.com/product/postbix/ pour les détails.

6.7 Avantages et inconvénients de Zabbix• Puissant

• Modulaire

249 / 275 http://www.bull-formation.com

Page 250: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.8 Zabbix : copie d'écran

250 / 275 http://www.bull-formation.com

Page 251: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

6.9 Zabbix : copie d'écran

251 / 275 http://www.bull-formation.com

Page 252: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7 Partie 5 : surveillance

• Surveillance occasionnelle

• Outils de monitoring

• Nagios

• Zabbix

7.1 Surveillance : commandes Unix• top, atop, htop, topas

• iotop

Ces commandes affichent les tâches en cours d'exécution ainsi que l'utilisation CPU et la mémoire.

Appuyez sur la touche u puis saisissez postgres pour que les processus soient filtrés suivant l'utilisateur postgres. Appuyez sur la touche c pour voir la commande complète au lieu du seul nom de l'exécutable (si votre écran est assez large). Vous aurez davantage de détail sur chaque processus postgres que le simple nom de celui-ci.

top n'existe pas directement sur Solaris. L'outil par défaut sur ce système est prstat.

Attention aux valeurs des colonnes used et free. La mémoire réellement utilisée correspond plutôt à la soustraction de used et de buffers (ce dernier étant le cache disque mémoire du noyau).

Sur des systèmes Linux de noyau 2.6.20 ou plus, on peut aussi installer et utiliser iotop, qui permet d'obtenir un affichage voisin de celui de top, mais détaillant les entrées sorties de chaque processus.

Voici un exemple d'utilisation d'iotop :

Total DISK READ: 40.86 K/s | Total DISK WRITE: 10.35 M/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND

428 be/3 root 0.00 B/s 804.56 B/s 0.00 % 0.00 % [kjournald]4761 be/4 guillaum 0.00 B/s 804.56 B/s 0.00 % 0.00 % postgres: logger process4763 be/4 guillaum 0.00 B/s 3.81 M/s 0.00 % 0.00 % postgres: writer process4764 be/4 guillaum 0.00 B/s 103.71 K/s 0.00 % 0.00 % postgres: wal writer process4766 be/4 guillaum 0.00 B/s 12.57 K/s 0.00 % 0.00 % postgres: stats collector process895 be/3 root 0.00 B/s 20.43 K/s 0.00 % 0.00 % [kjournald]

252 / 275 http://www.bull-formation.com

Page 253: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1044 be/3 root 0.00 B/s 39.29 K/s 0.00 % 0.00 % [kjournald]1351 be/4 guillaum 804.56 B/s 13.93 M/s 0.00 % 0.00 % postgres: guillaume b1 [local] INSERT

7.2 Surveillance : commandes Unix• ps aux | grep ^postgres : Affiche la liste des processus exécutés

par l'utilisateur postgres.

Premier exemple du résultat de la commande ps avec un PostgreSQL 8.4:

guillaume@laptop:~$ ps xfo args | grep [p]ostgres/opt/postgresql-8.4/bin/postgres\_ postgres: logger process\_ postgres: writer process\_ postgres: wal writer process\_ postgres: autovacuum launcher process\_ postgres: stats collector process\_ postgres: guillaume b1 [local] idle\_ postgres: guillaume b2 ::1(48283) idle

Deuxième exemple:

guillaume@laptop:/opt/postgresql-8.4/data$ ps aux | grep [p]ostgres1000 4779 0.0 0.1 35952 3524 pts/4 S 10:40 0:01 /opt/postgresql-8.4/bin/postgres1000 4780 0.0 0.0 8284 1048 ? Ss 10:40 0:00 postgres: logger process1000 4782 0.0 1.2 36084 25936 ? Ss 10:40 0:01 postgres: writer process1000 4783 0.0 0.0 35952 1316 ? Ss 10:40 0:01 postgres: wal writer process1000 4784 0.0 0.1 36804 2080 ? Ss 10:40 0:04 postgres: autovacuum launcher process1000 4785 0.0 0.0 9112 1708 ? Ss 10:40 0:10 postgres: stats collector process1000 21187 0.0 0.1 36672 2456 ? Ss 14:17 0:00 postgres: guillaume b1 [local] idle1000 21220 0.0 0.1 36488 2216 ? Ss 14:17 0:00 postgres: guillaume b2 ::1(48283) idle

Voici le contenu de chaque colonne pour ce deuxième exemple:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

Troisième exemple:

guillaume@laptop:~$ ps -e -o pid,ppid,wchan:60,cmd | grep [p]ost15641 1 poll_schedule_timeout /opt/postgresql-8.4/bin/postgres15642 15641 poll_schedule_timeout postgres: logger process 15644 15641 poll_schedule_timeout postgres: writer process 15645 15641 poll_schedule_timeout postgres: wal writer process

253 / 275 http://www.bull-formation.com

Page 254: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

15646 15641 poll_schedule_timeout postgres: autovacuum launcher process 15647 15641 poll_schedule_timeout postgres: archiver process last was 0000000100000008000000DE.00000020.backup15648 15641 poll_schedule_timeout postgres: stats collector process

7.3 Surveillance : commandes Unix• iostat [-k 1]

• vmstat [1]

• sysstat

iostat affiche des statistiques sur l'utilisation CPU et les I/O, l'option -k affiche des valeurs en Ko/s au lieu de blocs/s. L'option -x permet d'avoir plus d'informations, comme par exemple les colonnes await (temps moyen d'attente et d'exécution de la commande) et svctm (temps moyen d'exécution de la commande). Il est particulièrement important d'avoir des chiffres similaires car cela indique peu de latence. Le nombre en fin de commande est l'intervalle de rafraichissement en secondes.

vmstat affiche des informations sur les processus, la mémoire, la pagination, les blocs d'entrées-sorties, les interruptions et l'activité du processeur. Voici un exemple :

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa0 0 79024 180476 144716 922560 0 1 53 67 48 219 11 3 84 20 0 79024 172640 144728 930828 0 0 0 576 1013 1570 8 3 88 02 0 79024 171556 144732 931960 0 0 4 488 987 1176 5 3 91 00 1 79024 127388 144792 976372 0 0 28 21300 1230 1516 29 8 46 171 0 79024 80608 144840 1022652 0 0 20 19056 1270 1331 30 9 42 190 2 79120 57364 144812 1044996 0 96 24 26268 1007 1100 50 9 22 200 0 79120 54752 144828 1047192 0 0 0 6076 954 1159 7 3 81 80 0 79120 54760 144828 1047264 0 0 0 488 857 1044 4 4 92 01 0 79120 54652 144836 1047264 0 0 0 50008 870 1217 4 5 88 30 0 79120 57272 144840 1049388 0 0 4 500 881 1415 8 3 87 1

Enfin, le package sysstat permet de récupérer un grand nombre d'informations. L'outil pidstat permet même de récupérer ces informations, mais pour un seul processus. Pour cela, il faut avoir le noyau Linux 2.6.20 ou supérieurs ainsi que la version 7.1.5 de sysstat.

254 / 275 http://www.bull-formation.com

Page 255: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.4 Surveillance : commandes Unix• free

• ipcs et ipcrm

• dstat

La commande free affiche la quantité de mémoire utilisé ou disponible. Typiquement on utilise la commande avec les options suivantes :

free -ms 5

Lorsqu'un programme utilisant des IPC (Inter Processus Communication, ou segments de mémoire partagée ) ne se termine par correctement, il peut arriver que les segments créées ne soient pas supprimées. Afin de maintenir un état cohérent, on dispose de deux commandes : la première ipcs permet de connaître l'état courant et les identificateurs que l'on peut utiliser comme arguments de la deuxième (iprm) qui sert à supprimer des IPC.

Dstat est un utilitaire écrit en python qui fournit statistiques et données sur l'utilisation d'un système et peut remplace avantageusement à lui seul vmstat, iostat, netstat, nfsstat et ifstat. En effet, Dstat dépasse les limitations de ces outils et ajoute quelques fonctions supplémentaires, plus de compteurs et de flexibilité. Dstat est donc très utile pour monitorer des systèmes ou les débugger, qu'ils soient de tests, de production ou de qualification (benchmarking).

Dstat est prévu au départ pour fournir une sortie « human-readable » en standard et en temps réel. Il est désormais complété d'une sortie CSV qui permet de fournir des fichiers à analyser dans votre tableur favori et de générer des graphiques.

7.5 Surveillance : commandes Win32• tasklist

• Outil Performances des outils d'administration

• Process Monitor

• Process Explorer

• “desktop heaps”

L'outil en ligne de commande tasklist permet de récupèrer la liste des processus en cours d'exécution avec quelques informations supplémentaires comme le PID,

255 / 275 http://www.bull-formation.com

Page 256: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

l'utilisateur, l'utilisation de la mémoire, le temps processeur, etc. On peut lui indiquer des filtres, par exemple, la commande suivante permet de ne récupérer que les processus postgres.exe :

tasklist /v /fi "imagename eq postgres.exe"

L'outil Performances, disponible dans les outils d'administration, est très complet sur les informations récupérables. L'icône + permet d'ajouter un compteur. Parmi les compteurs intéressants se trouvent les lectures et écritures disques, le temps processeur (du système complet), le nombre de pages lues en mémoire, etc. Ceci est faisable sur le système complet mais aussi sur un processus particulier.

Process Monitor est un outil de surveillance avancé pour Windows. Il affiche en temps réel l'utilisation du système de fichiers, de la base de registre et de l'activité des processus. Il combine les fonctionnalités de deux anciens outils, FileMon et Regmon, tout en ajoutant un grand nombre de fonctionnalités (filtrage, propriétés des événements et des processus, etc). Process Explorer permet d'afficher les accès aux fichiers (DLL et autres) par processus.

Dans certains cas d'utilisation, certaines versions de PostgreSQL peuvent consommer l'ensemble des blocs mémoires (« desktop heaps ») alloués par Windows pour un service d'environ 45 connexions. En cas de crashs du serveur, il est important de surveiller la consommation de ces desktop heaps.

• Plus d'informations sur le bug : http://archives.postgresql.org/pgsql-patches/2007-10/msg00171.php

• Les outils sont expliqués ici: http://blogs.msdn.com/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx

• Et téléchargeables ici: http://blogs.msdn.com/ntdebugging/archive/2006/12/15/getting-ready-for-windows-debugging.aspx

7.6 Surveillance : pg_locksTable système qui permet de :

• visualiser les verrous ;

• identifier une source de contention ;

• analyser les effets des verrous sur les performances.

256 / 275 http://www.bull-formation.com

Page 257: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.7 Surveillance : disques• La table pg_class contient les données relatives à la taille des tables

et des index.

• Les fonctions pg_relation_size et pg_database_size fournissent aussi la taille des relations et bases de données.

Voici quelques exemples :

Affichage du nombre de pages (8ko) utilisées pour chacune des relations :

SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

Affichage de la taille d'une base de données (en octets) :

SELECT pg_database_size('my_base');pg_database_size------------------287437448

7.8 pgsnap : présentation• PGSnap est un outil permettant de générer un rapport complet sur la

base de données analysée.

• L'outil va créer un ensemble de pages HTML lisibles après coup avec tout navigateur internet.

• Tout le contenu des catalogues systèmes est récupéré, ainsi que la configuration, quelques données systèmes, etc.

PGSnap est un projet actif proposé par Dalibo. Il est sous licence BSD. Le site officiel se trouve sur http://pgsnap.projects.postgresql.org.

257 / 275 http://www.bull-formation.com

Page 258: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.9 pgsnap : utilisationSyntaxe :

pgsnap.php [options] nom_baseLes options les plus utiles:

• -a : pour disposer d'un rapport pour chaque base de données du serveur

• -o : pour spécifier le nom du répertoire contenant le rapport

• -S : pour ne pas récupérer d'informations sur les catalogues systèmes

• toutes les options de connexions (identiques aux autres outils PostgreSQL)

7.10 pgsnap : copie d'écran

258 / 275 http://www.bull-formation.com

Page 259: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.11 pgsnap : copie d'écran

7.12 Nagios• Site officiel : http://www.nagios.org/

• Plugins pour PostgreSQL : http://nagiosplugins.projects.postgresql.org/

• Plug-in alternatif : http://bucardo.org/check_postgres/

• Centreon, une interface évoluée pour Nagios : http://www.centreon.com/

7.13 Nagios : avantages• Austère

• Efficace

• Documenté

• Extrêmement robuste

259 / 275 http://www.bull-formation.com

Page 260: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.14 Nagios : copie d'écran

260 / 275 http://www.bull-formation.com

Page 261: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.15 Nagios : copie d'écran

7.16 Pnp4Nagios• Plug-in de visualisation pour Nagios

• Facilement intégrable dans l'IHM de Nagios

• la collecte est effectuée par les agents Nagios

Retrouvez Pnp4Nagios sur le site : http://www.pnp4nagios.org

Copie d'écran :

261 / 275 http://www.bull-formation.com

Page 262: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.17 Surveillance avec Monit

• Surveillance et gestion de processus

• Détection de défaillance et exécution d'action selon le contexte

Monit est un outil de surveillance et de gestion de processus, capable de détecter une défaillance et d'exécuter des actions pertinentes en fonction des erreurs et des différentes situations.

On peut par exemple utiliser monit pour surveiller les processus PostgreSQL et tenter

262 / 275 http://www.bull-formation.com

Page 263: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

plusieurs relances du service en cas d'arrêt inopiné. Monit est distribué sous licence GPL, écrit en C.

Le site officiel se trouve sur : http://mmonit.com

7.18 Surveillance avec MonitExemple de script:

check process postgresql with pidfile /opt/postgres/data/postmaster.pidgroup databasestart program = "/etc/init.d/postgresql start"stop program = "/etc/init.d/postgresql stop"if failed unixsocket /tmp/.s.PGSQL.5432 protocol pgsql then restartif failed unixsocket /tmp/.s.PGSQL.5432 protocol pgsql then alertif failed host localhost port 5432 protocol pgsql then restartif failed host localhost port 5432 protocol pgsql then alertif 5 restarts within 5 cycles then timeout

On peut facilement définir des scripts monit pour PotsgreSQL qui surveille que le socket Unix est accessible. En cas d'indisponibilité, monit peut tenter de relancer le serveur à 5 reprises.

Plus d'information sur : http://mmonit.com/wiki/Monit/PostgreSQL

7.19 Avantages et inconvénients de Monit• Simple et flexible

• Réactions automatiques en cas de panne

• Possibilité de gestion distribuée avec m/monit

• Attention aux effets de bords

La particularité de monit par rapport à d'autres solutions similaires (Zabbix, Nagios) réside dans le fait qu'il est capable de déclencher des actions pour tenter de rétablir un service interrompu, comme par exemple relancer un serveur Apache s'il ne répond plus ou vider la file d'attente d'un serveur Postfix en cas d'engorgement.

m/monit est un système de gestion à distance de multiples instances monit. C'est aussi un serveur à qui les instances monit envoient des informations historiques et statistiques.

Monit est très pratique et très puissant. Mais s'il est mal configuré, il peut déclencher des actions automatiques qui peuvent avoir un effet négatif sur une situation déjà

263 / 275 http://www.bull-formation.com

Page 264: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

critique. Notamment si le test de surveillance est mal défini, monit peut dans certains cas stopper le service sans que ce soit nécessaire : À utiliser avec précaution !

7.20 Monit : copie d'écran

264 / 275 http://www.bull-formation.com

Page 265: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

7.21 Monit : copie d'écran

7.22 Surveillance : d'autres pistes• ZenOSS : http://www.zenoss.com

• OpenNMS : http://www.opennms.org

• Hobbit : http://hobbitmon.sourceforge.net/

265 / 275 http://www.bull-formation.com

Page 266: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

8 Conclusion

• Munin et Nagios forment un couple simple, stable et complet

• Zabbix est une solution intégrale intéressante

• pgFouine est un outil indispensable pour optimiser et/ou débugguer

des requêtes

8.1 QuestionsN'hésitez pas, c'est le moment !

266 / 275 http://www.bull-formation.com

Page 267: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

Travaux Pratiques

267 / 275 http://www.bull-formation.com

Page 268: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

1 Énoncés

1.1 Munin• Installer le serveur munin sur votre poste

• Installer le client munin sur votre poste

• Configurer le serveur munin pour que seul l'accès local soit autorisé

• Installer les plugins PostgreSQL

• Tester l'accès aux rapports

• Créer un plugin pour munin qui renvoie l'état des stocks et l'activer.

1.2 pgFouine• Installer pgfouine

• Configurer PostgreSQL pour qu'il enregistre les traces dans le bon format (nous allons utiliser syslog pour le TP)

• Configurer syslog pour renvoyer les traces dans le fichier /var/log/pgsql

• Utiliser pgfouine pour générer des rapports

1.3 PGSnap• Installer pgsnap dans votre répertoire personnel

• Exécuter pgsnap sur la base cave en précisant comme répertoire du rapport rapport_cave

• Comment trouver la plus grosse table de la base cave ?

• Comment connaître le ratio des lectures mémoire/disque ?

• Comment trouver les requêtes qui ont permis de récupérer cette information ?

268 / 275 http://www.bull-formation.com

Page 269: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2 Corrections

2.1 Munin

2.1.1 Installer le serveur munin sur votre poste

2.1.1.1 Dépendances

Il est nécessaire d'avoir les paquets suivants sur le système:

• perl-Net-Server

• perl-DateManip

• perl-HTML-Template

• perl-rrdtool

• perl-Net-Server

• rrdtool

Vous pouvez les installer avec aptitude sous Debian, yum sous Fedora ou encore urpmi sous Mandriva.

2.1.1.2 Installation

Télécharger munin sur http://munin.projects.linpro.no

Les paquets rpm pour rhel4 peuvent être utilisés :

wget http://ovh.dl.sourceforge.net/sourceforge/munin/munin-1.2.4-8rhel4.noarch.rpm

puis installer le paquet à l'aide de l'outil rpm :

rpm -ivh munin-1.2.4-8rhel4.noarch.rpm

Néanmoins, utilisez plutôt le gestionnaire de paquets de votre distribution.

2.1.2 Installer le client munin sur votre poste

2.1.2.1 Dépendances

Il est nécessaire d'installer le paquet suivant sur le système :

269 / 275 http://www.bull-formation.com

Page 270: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

• sysstat

2.1.2.2 Installation

Sur chacun des clients à monitorer, il est nécessaire d'installer munin-node. munin-node peut être téléchargé sur http://munin.projects.linpro.no

Les paquets rpm pour rhel4 peuvent être utilisés :

wget http://ovh.dl.sourceforge.net/sourceforge/munin/munin-node-1.2.4-8rhel4.noarch.rpm

puis installer le paquet à l'aide de l'outil rpm :

rpm -ivh munin-node-1.2.4-8rhel4.noarch.rpm

Néanmoins, utilisez plutôt le gestionnaire de paquets de votre distribution.

2.1.3 Configurer le serveur munin pour que seul l'accès local soit autorisé

Il faut modifier le fichier /etc/munin/munin-node.conf pour que le serveur munin puisse accéder à chacun des noeuds. C'est également dans ce fichier qu'on détermine pour un noeud donné les plugins à utiliser.

1. Positionner le nom du noeud correctement si ce n'est pas correctement retourné par la commande hostname :

host_name host.domaine

2. Autoriser le serveur munin à accéder au noeud :

allow ^192\.168\.0\.1$

3. Activer le service munin-node :

chkconfig --level 2 munin-node onchkconfig --level 3 munin-node onchkconfig --level 4 munin-node onchkconfig --level 5 munin-node on

2.1.4 Installer les plugins PostgreSQL1. Télécharger le plugin sur http://www.dalibo.org :

270 / 275 http://www.bull-formation.com

Page 271: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

wget http://pgfoundry.org/frs/download.php/2096/muninpgplugins-0.2.2.tar.gz

2. Extraire l'archive dans un répertoire temporaire :

tar xzvf muninpgplugins-0.2.2.tar.gz

3. Copier les plugins dans le répertoire /usr/share/munin/plugins :

cd munin-plugins-postgresqlcp db_* /usr/share/munin/plugins/

4. Faire un lien de chacun des plugins dans le répertoire /etc/munin/plugins :

cd /etc/munin/pluginsln -s /usr/share/munin/plugins/db_cache_hit_miss_ratio .ln -s /usr/share/munin/plugins/db_cluster_occupancy .ln -s /usr/share/munin/plugins/db_connexions .ln -s /usr/share/munin/plugins/db_connexions_each .ln -s /usr/share/munin/plugins/db_size_each .

5. Ajouter au fichier de configuration in /etc/munin/plugin-conf.d/munin-node les lignes suivantes :

[db_*]user root

6. Vérifier les plugins : exécuter chacun des plugins.

7. Re-démarrer le service munin-node :

/etc/init.d/munin-node restart

2.1.5 Création du plugin munin

#!/bin/bash #%# family=postgresql#%# capabilities=autoconf # If run with the "autoconf"-parameter, give our opinion on wether we# should be run on this system or not. This is optional, and only used by# munin-config. In the case of this plugin, we should most probably# always be included. if [ "" = "autoconf" ]; then echo yes exit 0

271 / 275 http://www.bull-formation.com

Page 272: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

fi if [ "" = "config" ]; then # The title of the graph echo 'graph_title Stocks' # Arguments to "rrdtool graph". In this case, tell it that the # lower limit of the graph is '0' echo 'graph_args -l 0 --base 1000' # The Y-axis label echo 'graph_vlabel nombre de bouteilles' # Graph category. Defaults to 'other' echo 'graph_category user' # The fields. "label" is used in the legend. "label" is the only # required subfield. echo 'user_stocks.label stock de bouteilles' echo 'user_stocks.type GAUGE' # This one is purely to add an explanation to the web page echo "graph_info Etat du stock de bouteilles" # Last, if run with the "config"-parameter, quit here (don't # display any data) exit 0fi NUMBER=`psql -U caviste -t -c "select sum(nombre) from stock" cave` # do the jobecho "user_stocks.value $NUMBER"

2.1.6 Installation du plugin1. Copier le plugin dans le répertoire /usr/share/munin/plugins :

cp user_stocks /usr/share/munin/plugins/

2. Faire un lien vers chaque plugin dans le répertoire /etc/munin/plugins :

cd /etc/munin/pluginsln -s /usr/share/munin/plugins/user_stocks .

3. Ajouter au fichier de configuration dans le répertoire /etc/munin/plugin-conf.d/munin-node les lignes suivantes :

[user_*]user root

4. Re-démarrer le service munin-node :

/etc/init.d/munin-node restart

272 / 275 http://www.bull-formation.com

Page 273: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.2 pgFouine

2.2.1 Installer pgfouinePour les systèmes Unix utilisant des paquets RPM, vous pouvez télécharger le paquet pgFouine sur pgfoundry :

wget http://pgfoundry.org/frs/download.php/2179/pgfouine-1.1-1.noarch.rpm

puis installer le paquet à l'aide de l'outil rpm :

rpm -ivh pgfouine-1.1-1.noarch.rpm

Pour les autres, le mieux est de récupérer le paquet des sources :

wget http://pgfoundry.org/frs/download.php/2178/pgfouine-1.1.tar.gz

2.2.2 Configurer les traces de PostgreSQLModifier les directives suivantes dans le fichier postgresql.conf afin de logguer les informations avec syslog :

log_destination = 'syslog'redirect_stderr = offsilent_mode = on

log_min_duration_statement = 0log_duration = offlog_statement = 'none'

log_line_prefix = 'user=%u,db=%d'

lc_messages = 'C'

Redémarrer PostgreSQL :

/etc/init.d/postgresql restart

2.2.3 Configurer syslogMettre à jour le fichier /etc/syslog.conf afin de logguer :

local0.* -/var/log/pgsql

273 / 275 http://www.bull-formation.com

Page 274: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

*.info;mail.none;;news.none;authpriv.none;local0.none -/var/log/messages

Redémarrer syslogd :

/etc/init.d/syslog restart

2.2.4 Utiliser pgfouine pour générer des rapportsPour générer des rapports avec le fichier /var/log/pgsql :

pgfouine.php -file /var/log/pgsql > /var/www/html/rapport.html

Pour générer un rapport sur un vacuum, rediriger la sortie du vacuum vers un fichier :

vacuumdb -avfz > vacuumdb.res 2>&1

Puis utiliser l'outil pgfouine_vacuum.php comme suit :

pgfouine_vacuum.php -file vacuumdb.res > /var/www/html/rapport_vacuum.html

2.3 PGSnap

2.3.1 Installer pgsnapDeux paquets sont à installer:

• php5-pgsql, pour le pilote PostgreSQL de PHP

• php5-cli pour la version client de PHP

Télécharger pgsnap sur pgfoundry :

wget http://pgfoundry.org/frs/download.php/1825/pgsnap-0.4.0.tar.gz

puis décompresser le paquet à l'aide de l'outil tar :

tar xvfz pgsnap-0.4.0.tar.gz

274 / 275 http://www.bull-formation.com

Page 275: Formation PostgreSQL - Mahoro Netaterizak/0028pga-administration...Administration PostgreSQL 6 Sponsors & Références.....43 6.1 Sponsors

Administration PostgreSQL

2.3.2 Exécuter pgsnapPour générer un rapport sur la base de données cave dans le répertoire rapport_cave :

pgsnap.php -o rapport_cave cave

Pour visualiser le rapport :

konqueror rapport_cave/index.html

2.3.3 DiversLe rapport Table Size Graph (onglet Database Objects) donne un graphique permettant de trouver rapidement la plus grosse table de la base du rapport.

Le ratio se trouve dans le rapport Cache Hit Ratio de l'onglet Statistics. Il est affiché pour chaque base de données.

Le bouton « Show SQL Commands! » donne cette information pour tous les rapports.

275 / 275 http://www.bull-formation.com