Maintenance des données

Formation administration PostgreSQL
Logo de PostgreSQL l'archivage des données

La maintenance des données

Introduction

Il n'y a pas de méthode de sauvegarde qui soit meilleure qu'une autre. Chacune est à utiliser dans le contexte le plus approprié.

La sauvegarde SQL

Cette approche permet également de faire des échanges de données vers des systèmes SQL autres que PostgreSQL, bien sûr en cas d'utilisations de spécificités PostgreSQL une tâche de portage est à prévoir.

La sauvegarde SQL

le client pg_dump ne dispose évidemment d'aucun droit particulier, le serveur ne pratiquant l'authentification que sur les informations lui étant transmises lors de la connexion. Il sera grandement facilité de se connecter à partir du compte UNIX postgres, car la commande se comportera comme psql, et le mécanisme des sockets UNIX se mettra en œuvre à moins que celui-ci soit interdit par la configuration (voir le fichier pg_hba.conf).

La sauvegarde SQL

Les modifications structurelles des tables ALTER TABLE sont parmi les opérations bloquantes ou bloquées.

La sauvegarde SQL

La sauvegarde des OIDs n'est plus disponible depuis la version 12.

La restauration SQL

Il est souvent préférable d'annuler une sauvegarde plutôt que d'avoir une restauration partielle de la base de données. C'est la raison pour laquelle le mode de restauration dans une transaction est le mieux approprié.

Si l'option --create à été utilisée avec pg_dump alors il ne sera pas nécessaire de créer la base car l'instruction de création est dans se cas contenue dans le fichier de sauvegarde.

La restauration SQL

Il est très souvent pratique de réaliser des procédures de synchronisation automatiques entre différents serveurs PostgreSQL. Ceci est facilement réalisable par ajout d'une ligne dans la crontab. Par exemple pour faire une synchronisation toutes les nuits de dimanche à lundi à 3:00 il suffit d'insérer :

0 3 * * 1 pg_dump ma_database | psql -h serveur_mirroir db_mirroir.

La restauration par pg_restore

Seul le format SQL accessible par --format=plain depuis pg_dump (format par défaut) ne permet pas de restauration par pg_restore.

La restauration par pg_restore

Si le schéma n'est pas précisé alors toutes les tables du nom indiqué seront restaurées.

L'option --clean de pg_restore permet de détruire les objets avant de les régénérer.

Le chiffrement des données

Pour pouvoir utiliser gpg il sera nécessaire d'avoir configuré au préalable l'environnement de stockage des clefs de chiffrement. Cesi peut se faire par l'utilisation de la commande pass comme suit :

pass init username

La commande pass est disponible depuis les dépôts de password-store.

Archivage par système de fichier

Il ne faut pas oublier les tablespaces qui sont généralement situées sur des partitions différentes.

On pourrait être tenté de ne sauvegarder et restaurer que certaines tables ou bases de données particulières. Ce n'est pas utilisable sans les fichiers journaux de validation pg_xact/* qui contiennent l'état de la validation de chaque transaction. Un fichier de table n'est utilisable qu'avec cette information. Il est impossible de ne restaurer qu'une table et les données pg_xact associées car cela rendrait toutes les autres tables du serveur inutilisables. Les sauvegardes du système de fichiers fonctionnent, de ce fait, uniquement pour les sauvegardes et restaurations complètes d'un cluster de bases de données.

Archivage par système de fichier

L'utilisation de la commande rsync en 2 étapes permet de considérablement réduire le temps d'arrêt du serveur PostgreSQL car les modifications suite à l'arrêt du serveur seront mineures entre les deux passages par rsync.

Archivage par fichiers CSV

Archivage par fichiers CSV

Si le nom du fichier utilisé est STDIN en restauration ou STDOUT en archivage l'opération sera réalisée en flux depuis le client.

Si une commande SQL est fournie à la place d'un nom de table, le résultat de cette commande sera utilisé pour la sauvegarde. C'est le moyen permettant de faire des sauvegardes partielles de tables ou de vues.

Archivage par fichiers CSV

Les options de la commande copy

nomdescription
FORMAT {text|csv|binary}format de transfert
OIDSsi présent les OIDs des lignes seront exportés
DELIMITER 'délimiteur'caractère de séparation
NULL 'chaîne_null'chaîne représentant la valeur NULL
HEADERplacera une ligne d'en-tête en CSV seulement
QUOTE 'guillemet'caractère guillemet à utiliser pour mettre entre guillemets
ESCAPE 'échappement'caractère d'échappement à utiliser
FORCE_QUOTE {(colonne [, ...])|*}force la mise entre guillemets sur les colonnes indiquées
FORCE_NOT_NULL {(colonne [, ...])|*}force les valeurs à ne pas être nulles

Le format par défaut text.

Archivage par fichiers CSV

Avant d'importer une table avec COPY celle-ci doit exister au préalable.

Archivage par fichiers CSV

Avant d'importer une table avec COPY celle-ci doit exister au préalable.

Montée en version

Il est cependant toujours possible de réaliser ce transfert uniquement via la commande pg_dumpall.

Montée en version

Il conviendra bien sûr d'invoquer la commande pg_upgrade depuis la machine hébergeant le cluster à migrer et sous le nom de l'utilisateur approprié (le plus souvent postgres).

Pour obtenir de l'aide

Sur le site officiel de PostgreSQL :

Aide sous UNIX :