Académique Documents
Professionnel Documents
Culture Documents
PostgreSQL 8
installation
configuration
exploitation
v_20081002
dans l'original, les noms et logos d'autres contributeurs ne pourront pas apparatre dans une taille suprieure celle des auteurs prcdents, des
commentaires ou additions peuvent tres insrs condition d'apparatre clairement comme tels ;
! les traductions ou fragments doivent faire clairement rfrence une copie originale complte, si possible une copie facilement accessible ;
! les traductions et les commentaires ou ajouts insrs doivent tre dats et leur(s) auteur(s) doi(ven)t tre identifiable(s) (ventuellement au travers d'un
alias) ;
! cette licence est prserve et s'applique l'ensemble du document et des modifications et ajouts ventuels (sauf en cas de citation courte), quelqu'en
accessible au moment de la premire diffusion de la version imprime, toute personne ayant accs une version numrise de ce document doit
pouvoir en faire une copie numrise dans un format directement utilisable et si possible ditable, suivant les standards publics, et publiquement
documents en usage ;
! la transmission de ce document un tiers se fait avec transmission de cette licence, sans modification, et en particulier sans addition de clause ou
contrainte nouvelle, explicite ou implicite, lie ou non cette transmission. En particulier, en cas d'inclusion dans une base de donnes ou une
collection, le propritaire ou l'exploitant de la base ou de la collection s'interdit tout droit de regard li ce stockage et concernant l'utilisation qui
pourrait tre faite du document aprs extraction de la base ou de la collection, seul ou en relation avec d'autres documents.
Toute incompatibilit des clauses ci-dessus avec des dispositions ou contraintes lgales, contractuelles ou judiciaires implique une limitation
correspondante : droit de lecture, utilisation ou redistribution verbatim ou modifie du document.
Adapt de la licence Licence LLDD v1, octobre 1997, Libre reproduction Copyright Bernard Lang [F1450324322014].
URL : http://pauillac.inria.fr/~lang/licence/lldd.html
L'original de ce document est disponible cette URL : http://sebastien.nameche.fr/cours
La photographie de la couverture est Copyright (c) Shonali Laha (http://www.fiu.edu/~lahas/), tous droits rservs. Utilise ici avec son aimable
autorisation, je l'en remercie. Elle a t prise en mai 2002. Il s'agit d'un lphant vivant probablement dans le Parc National de Tarangire, en Tanzanie.
Il s'agit d'une formation interactive, il est donc tout fait indiqu d'interrompre le
formateur pour lui poser des questions, lui faire prciser certains points, demander l'tude
d'un cas particulier, etc.
PostgreSQL est dvelopp selon le mode Open Source , sous licence BSD.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement
is hereby granted, provided that the above copyright notice and this
paragraph and the following two paragraphs appear in all copies.
Un fois PostgreSQL install, des pages de manuels Unix sont galement consultables
avec la commande man (commandes Unix en section 1, commandes SQL en section 7).
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 9
Comparatif avec les autres BDD
De telles comparaisons sont souvent prilleuses.
Malgr tout :
PostgreSQL 8 MySQL 5 Oracle 10g
espaces de tables oui non oui
tables partitionnes mules oui oui
conforme ACID oui avec InnoDB oui
intgrit rfretielle oui avec InnoDB oui
langage procdural plusieurs oui PL/SQL, Java
dclencheurs oui limits oui
curseurs oui limits oui
authentifications LDAP, kerberos, non oui
externes PAM, GSSAPI, etc.
Concernant les performances, il est souvent admis que MySQL est plus rapide lorsqu'il
est utilis avec le moteur MyISAM. Cependant, cet environnement pose plusieurs
problmes (notamment corruption possible des donnes et contention des verrous).
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 10
Partie 1
Installation et configuration
Le dpt backports.org propose des versions plus rcentes de PostgreSQL (8.2 et 8.3)
sous forme de paquets Debian.
Pour CentOS 5.1, utiliser les paquets disponibles dans les rpertoires redhat/rhel-5-i386
ou redhat/rhel-5-x86_64, les paquets suivants, au moins, sont ncessaires :
- postgresql-libs
- postgresql
- postgresql-server
Installation et dmarrage :
# rpm -ivh postgresql-*
# service postgresql initdb
# service postgresql start
Les versions de PostgreSQL disponibles sont 7.3 et 7.4 ainsi que 8.0 8.4.
Parmi les contributions utiles installer figure notamment adminpack qui permet
d'tendre les fonctions de l'interface graphique pgAdminIII.
Le serveur PostgreSQL n'est jamais excut en tant que root. L'utilisateur systme utilis
est traditionnellement postgres et n'a pas besoin de mot de passe.
En gnral, mais cela dpend des systmes Unix, les paramtres du noyau sont configurs
par l'intermdiaire du fichier /etc/sysctl.conf. Par exemple, sous Linux :
kernel.shmall = 2097152 (soit 8 Go, car exprim en nombre de blocs)
kernel.shmmax = 134217728 (soit 128 Mo)
kernel.shmmni = 256
Le paramtre port (dont la valeur par dfaut est 5432) permet de choisir un port TCP
diffrent, ce qui est ncessaire si plusieurs instances sont excutes sur une mme
machine.
Le fichier pg_hba.conf est utilis pour configurer la manire d'authentifier les connexions
en fonction de leur origine et de la base de donnes concerne.
Attention !
Le fichier pg_hba.conf par dfaut autorise toutes les connexions locales de
n'importe quel utilisateur vers n'importe quelle base de donnes sans
authentification. Aucune connexion ne sera accepte depuis une autre machine
du rseau.
La colonne option n'est employe que lorsque la mthode d'authentification l'exige (par
exemple, pour ident ou pam).
L'ordre des lignes dans ce fichier est important car elles sont values les unes la suite
des autres. La premire correspondant aux critres type, base de donnes, utilisateur et
origine l'emporte.
Sous Debian :
# /etc/init.d/postgresq-8.1 start|stop|status|reload
Le processus pre de tous les autres est le postmaster. Certains processus fils ne sont
prsents que lorsque certains paramtres sont activs.
Le dernier processus de cette liste est un processus associ un client. Un tel processus
sera cr pour chaque nouvelle session.
Par exemple :
# cp contrib/start-scripts/linux /etc/init.d/postgresql_inst1
# chmod 755 /etc/init.d/postgresql_inst1
# /etc/init.d/postgresql_inst1
Modifier les variables suivantes :
prefix=/usr/local/postgresql834
PGDATA="/var/pg/u01/inst1"
# ln -s /etc/init.d/postgresql_inst1 /etc/rc2.d/S30postgresql_inst1
# ln -s /etc/init.d/postgresql_inst1 /etc/rc5.d/S30postgresql_inst1
# ln -s /etc/init.d/postgresql_inst1 /etc/rc0.d/K70postgresql_inst1
# ln -s /etc/init.d/postgresql_inst1 /etc/rc6.d/K70postgresql_inst1
Le jeu de caractres utilis par le client peut tre diffrent de celui de la base de donnes.
Le r-encodage sera effectu par le serveur.
Le dmarrage des instances lors du dmarrage du systme est galement pris en charge, il
n'est donc pas ncessaire de crer et modifier des scripts dans /etc/init.d.
La cl prive et le certificat x509 doivent tre enregistrs respectivement dans les fichiers
server.key et server.crt du rpertoire de l'instance.
Beaucoup permettent d'excuter des actions qui peuvent l'tre en SQL. Nous nous
concentrerons sur leur quivalent SQL. Pour cela, le client principal est l'interprteur de
commandes psql. Ses principaux paramres (tous optionnels) sont :
$ psql -h machine -p port nombdd utilisateur
Par exemple :
$ psql -h 192.168.1.42 postgres postgres
Password for user postgres:
Welcome to psql 8.2.7, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=#
pagila=#
pagila est le nom de la base de donnes active pour cette session
= signifie que psql attend une nouvelle commande
# indique que l'utilisateur connect est un administrateur de l'instance
postgres->
postgres est le nom de la base de donnes active pour cette session
- signifie que psql attend la suite d'une instruction SQL
> indique que l'utilisateur connect n'est pas un administrateur de l'instance
Le logiciel
pgAdminIII est
souvent utilis
comme alternative
graphique psql.
Pour Debian :
# apt-get install pgadmin3
Pour RedHat, CentOS et Fedora, le dpt de logiciels Dag en fournit une version cette
adresse :
http://dag.wieers.com/rpm/packages/pgadmin3/
Ce fichier SQL se trouve galement dans les contributions fournies avec le code source de
PostgreSQL si celui-ci a t compil. Par exemple :
# cd /root/postgresql-8.3.4/contrib/adminpack
# make install
# psql -U postgres < adminpack.sql
Son installation requiert un serveur Web et le langage PHP avec l'extension pgsql.
Structure et organisation
d'une instance PostgreSQL
Le langage de description des donnes est utilis pour crer, modifier et dtruire les objets
de la base de donnes (tables, index, squences, procdures, rles, etc.). Ce sous-
ensemble est reprsent par les verbes :
create alter drop grant revoke
Souvent, un groupe d'instructions LDD qui dcrivent un ensemble d'objets lis est appel
schma de donnes.
Par exemple :
postgres=# \d pg_database
Table "pg_catalog.pg_database"
Column | Type | Modifiers
---------------+-----------+-----------
datname | name | not null
datdba | oid | not null
encoding | integer | not null
datistemplate | boolean | not null
datallowconn | boolean | not null
datconnlimit | integer | not null
.../...
client instance
port TCP
postgres base de donnes 1 base de donnes 2
5432
schma 1 schma 1
rles
relations relations
schma 2 schma 2
relations relations
Organisation des
bases de donnes
pg_global pg_default tblspc1 tblspc2
dans une instance
PostgreSQL.
disque 1 disque 2 disque 3
Une instance gre plusieurs bases de donnes. Pour chaque instance, il existe au moins
ces bases de donnes :
- postgres ;
- template0 ;
- template1.
Les relations (tables, index, etc.) sont stockes dans les bases de donnes. Chaque base de
donnes est compartimente en espaces de noms : les schmas et les catalogues.
Pour chaque base de donnes il existe au moins le schma public et les catalogues :
- information_schema ;
- pg_catalog.
Les donnes associes chaque relation sont stockes dans un fichier dont le nom est
l'OID de la relation dans le rpertoire de la base de donnes :
$PGDATA/base/oid_bdd/filenode_relation
La base de donnes postgres fait exception la rgle, ses relations sont enregistres dans
le rpertoire $PGDATA/global.
Par exemple :
postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test".
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 52
Bases de donnes
Pour supprimer une base de donnes :
DROP DATABASE [ IF EXISTS ] nom
Une base de donnes ne peut tre supprime tant que des utilisateurs y sont connects.
Seul l'administrateur ou le propritaire d'une base de donnes peut la dtruire.
Attention !
Lors de la suppression d'une base de donnes, tous les objets qu'elle contient
sont dtruits sans avertissement et sans possibilit de retour en arrire.
Par exemple :
test=# drop database test;
ERREUR: n'a pas pu supprimer la base de donnes actuellement ouverte
test=# \c postgres
You are now connected to database "postgres".
postgres=# drop database test;
DROP DATABASE
postgres=#
Les objets d'un schma sont accessibles en prfixant leur nom par le nom du schma
suivit d'un point : schema.objet .
La variable search_path contient une liste de noms de schma qui seront considrs pour
trouver des noms d'objet qui ne sont pas qualifis. Cette variable contient par dfaut :
"$user",public
La commande \dn de psql permet de lister les espaces de noms (dont les schmas)
prsents dans la base de donnes. Pour crer un schma :
CREATE SCHEMA nom [ AUTHORIZATION utilisateur ]
Le propritaire par dfaut est l'utilisateur connect. Seuls les administrateurs et les
utilisateurs qui disposent du privilge create sur la base de donnes peuvent crer de
nouveaux schmas.
Par exemple :
test=# create schema compta;
CREATE SCHEMA
test=# create table compta.clients (id int, nom varchar);
CREATE TABLE
test=# drop schema compta;
INFO: table compta.clients dpend de schma compta
ERREUR: n'a pas pu supprimer schma compta car d'autres objets en dpendent
HINT: Utilisez DROP ... CASCADE pour supprimer aussi les objets dpendants.
test=# drop schema compta cascade;
INFO: DROP cascade sur table compta.clients
DROP SCHEMA
Note : par dfaut tous les droits sont octroys tous les utilisateurs sur le schma public.
Par exemple :
La table pg_autovacuum permet de contrler le nettoyage automatique des tables.
La table pg_database contient la liste des bases de donnes de l'instance.
La table pg_tablespace contient la liste espaces de table de l'instance.
La table pg_namespace contient la liste des schmas de la base de donnes.
La vue pg_roles liste les rles prsents dans l'instance.
La vue pg_stat_activity liste l'activit (les sessions) sur le serveur.
La vue pg_stat_user_tables donne des statistiques sur les tables de la base de donnes.
La vue pg_stat_user_index donne des statistiques sur les index de la base de donnes.
Par exemple :
plop=# create sequence journal.seq_article_id;
CREATE SEQUENCE
plop=# insert into journal.articles
plop-# values ( nextval('journal.seq_article_id'), 'Bla...' );
INSERT 0 1
plop=# select currval('journal.seq_article_id');
currval
---------
1
(1 row)
Par dfaut, chaque instruction est ralise dans le cadre d'une transaction qui est
automatiquement valide.
PostgreSQL accepte ces quatre niveaux d'isolation mais n'implmente que les niveaux
read commited et serializable. Le niveau read uncommited correspond read commited et
repeatable read serializable.
L'isolation entre les transactions est implment par le mcanisme MVCC (Multi-Version
Concurrency Control) qui gnre bien moins de soucis qu'une implmentation base sur
les verrous.
Il est nanmoins possible d'utiliser des verrous explicites. De plus, certaines oprations
requirent un accs exclusifs aux objets de la base de donnes (notamment les
instructions LDD), PostgreSQL est donc amen poser des verrous automatiquement.
Il existe pas moins de 8 niveaux de verrous sur les tables (et 2 sur les lignes) :
LOCK table [, ...]
[ IN ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
| SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE MODE ]
[ NOWAIT ]
Les verrous ne peuvent tre poss que dans le cadre d'une transaction commence avec
begin. Ils sont librs lorsque la transaction est termine.
La liste des verrous actifs est consultable dans la vue systme pg_locks.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 66
Recherche de texte avec tsearch2
tsearch2 est une contribution qui a t intgre PostreSQL 8.3, elle permet d'effectuer
des recherches intgrales de texte (full text searches).
Les fonctions to_tsvector et to_tsquery permettent d'obtenir ces objets qu'il suffit ensuite
de combiner avec l'oprateur @@. Par exemple :
bdd=> select to_tsvector('french', 'il tait un petit navire qui n''avait jamais navigu hoh hoh');
to_tsvector
---------------------------------------------------
'hoh':11,12 'jam':9 'pet':4 'navir':5 'navigu':10
postgres=> select to_tsquery('french', 'un & petit & naviguer');
to_tsquery
------------------
'pet' & 'navigu'
bdd=> select to_tsvector( 'french', 'il tait un petit navire qui n''avait jamais navigu hoh hoh')
bdd-> @@ to_tsquery('french', 'un & petit & naviguer');
?column?
----------
t
bdd=> select to_tsvector( 'french', 'il tait un petit navire qui n''avait jamais navigu hoh hoh')
bdd-> @@ to_tsquery('french', 'un & petit & bateau');
?column?
----------
f
Un rle peut :
- tre propritaire d'objets de l'instance (bases de donnes, tables, etc.) ;
- se voir octroyer des droits d'accs des objets ou des droit systme ;
- tre membre d'un autre rle ;
- se voir attribuer un mot de passe.
Les rles remplacent donc les notions d'utilisateurs et de groupes qui taient encore
utiliss par PostgreSQL 8.1.
Les rles ne sont pas lis aux utilisateurs et groupes du systme d'exploitation.
Ils sont associs une instance.
Par exemple, l'instruction suivante cre un rle (groupe) compta et lui associe deux autres
rles. Ces derniers hriteront des droits octroys au rle compta :
create role compta role sebastien, dominique;
Cette instruction cre un autre rle (utilisateur) et l'ajoute au rle (groupe) compta :
create role daniel login encrypted password 'abcde' in role compta;
Ces attributs sont associs aux rles lors de leur cration (CREATE ROLE) ou avec
l'instruction ALTER ROLE.
Les rles qui disposent de l'attribut SUPERUSER contournent le systme des privilges
(c'est--dire qu'ils ont tous les privilges).
Des privilges supplmentaires peuvent tre associs aux objets avec l'instruction
GRANT comme ceci :
GRANT { privilge [,...] | ALL } ON [ type_objet ] nom_objet [, ...]
TO { nom_role | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Par exemple, pour rvoquer tous les droits sur le schma public :
revoke all on schema public from public;
Par exemple :
plop=# create schema journal;
CREATE SCHEMA
plop=# create table journal.articles (id int, contenu text);
CREATE TABLE
plop=# create role utilisateurs;
CREATE ROLE
plop=# grant usage on schema journal to utilisateurs;
GRANT
plop=# alter role utilisateurs set search_path = 'journal';
ALTER ROLE
plop=# create role lecteur in role utilisateurs;
CREATE ROLE
plop=# create role auteur in role utilisateurs;
CREATE ROLE
plop=# grant select on journal.articles to lecteur;
GRANT
plop=# grant insert, update on journal.articles to auteur;
GRANT
plop=# create role daniel login encrypted password 'blabla' in role lecteur;
CREATE ROLE
plop=# create role marc login encrypted password 'plopplop' in role auteur;
CREATE ROLE
1) Une base de donnes est associe un rle utilisateur. En gnral le nom de la base de
donnes est identique celui du propritaire. Souvent, une base de donnes est cre pour
une application.
3) Un schma est associ un rle utilisateur, tous les objets utiliss par une application
sont crs dans ce schma et appartiennent cet utilisateur qui est l'administrateur de
l'application. Un rle groupe est cr, des droits lui sont affects pour utiliser les objets du
schma. Les utilisateurs de l'application sont des rles utilisateurs et sont membre du rle
groupe.
Les espaces de tables sont associs l'instance, ils sont dons disponibles pour l'ensemble
des bases de donnes de l'instance.
Ces langages sont implments par des bibliothques externes et ils doivent tre crs
avant d'tre utiliss. l'exception, du langage PL/pgSQL, ces bibliothques sont souvent
disponibles dans des paquets spars des distributions Linux.
Pour obtenir la liste des langages crs dans une base de donnes :
postgres=# select lanname from pg_language where lanispl = true;
lanname
---------
(0 rows)
Un langage dit sr (trusted) est un langage qui ne permet pas d'outrepasser le systme des
privilges de PostgreSQL. Seul les rles disposants de l'attribut administrateur auront
l'autorisation de crer des fonctions crites avec un langage non sr (untrusted).
Pour crer un langage dont un modle est disponible, par exemple PL/pgSQL :
postgres=# create language plpgsql;
CREATE LANGUAGE
Une image de l'enregistrement en cours de traitement est disponible dans les pseudo-
enregistrements NEW (pour les insertions et mises--jour) et OLD (mises--jour et
suppression).
Un dclencheur appelle une fonction, il est donc ncessaire de commencer par crire cette
fonction.
Par exemple :
drop table if exists histo;
create table histo (equipe varchar(20), jour date, avant int, apres int);
create or replace function trig_histo_scores()
returns trigger as $$
begin
if OLD.points <> NEW.points then
insert into histo ( equipe, jour, avant, apres )
values ( NEW.equipe, current_date, OLD.points, NEW.points );
end if;
return NEW;
end;
$$
language plpgsql;
drop trigger if exists trig_after_update_scores on scores;
create trigger trig_after_update_scores after update on scores
for each row execute procedure trig_histo_scores();
Par exemple :
<?php
header("Content-Type: text/plain; charset=ISO-8859-1");
$user = 'sebastien';
$pass = 'plopplop';
$dsn = 'pgsql:host=localhost;dbname=test';
try {
$dbh = new PDO($dsn, $user, $pass);
foreach ( $dbh->query('select * from articles') as $row ){
print_r($row);
}
$dbh = null;
}
catch (PDOException $e) {
print "Erreur ! : " . $e->getMessage();
die();
}
?>
Par exemple :
import java.sql.*;
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost/test";
String username = "sebastien";
String password = "plopplop";
Connection db = DriverManager.getConnection(url, username, password);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * FROM articles");
while ( rs.next() ){
System.out.println(rs.getString(1));
}
rs.close();
st.close();
Administration, exploitation
Plutt que d'crire directement dans les fichiers de donnes chaque fois qu'une
transaction est valide, les donnes modifies sous crites dans un journal linaire. De
nombreux dplacement des ttes de lecture des disques sont ainsi vits.
Si un arrt intempestif survient, PostgreSQL utilise les journaux binaires pour appliquer
aux fichiers de donnes les modifications gnres par les dernires transactions valides
avant l'arrt.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 93
Les journaux binaires
chaque point de contrle un enregistrement spcifique est crit dans les journaux
binaires. Toutes les donnes antrieures contenues dans ces journaux deviennent inutiles.
Les fichiers (appels segments) qui contiennent des journaux binaires dont toutes les
donnes sont antrieures au dernier point de contrle sont recycls.
Les journaux binaires peuvent galement tre archivs. Ils permettent ainsi d'effectuer
une sauvegarde au fil de l'eau et fournissent un mcanisme de retour en arrire (nomm
PITR, pour Point-In-Time Recovery).
Si la base de donnes subit une forte activit transactionnelle, les performances seront
largement amliores si les fichiers de donnes sont stocks sur des disques diffrents des
journaux binaires.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 94
Gestion de la mmoire
Pour dterminer les valeurs des paramtres de PostgreSQL lis l'utilisation de la
mmoire, il est ncessaire de garder l'esprit que ces zones de mmoires peuvent tre
partages en deux grandes catgories :
1) les zones de mmoires locales alloues par processus ;
2) les zones de mmoires partages entre tous les processus de l'instance.
Ces paramtres sont fixs dans le fichier postgresql.conf. Elles sont exprimes en Ko,
mais il est possible d'utiliser des units de taille dans le fichier de configuration.
Dans psql, il est possible de voir les valeurs avec l'instruction show et de les modifier
avec l'instruction set pour celles qui peuvent l'tre en fonctionnement.
Par exemple :
postgres=# show work_mem;
work_mem
----------
2MB
(1 row)
postgres=# set work_mem = 4096;
SET
Les statistiques collectes sont accessibles par l'intermdiaire des vues pg_stat_* et
pg_statio_* ainsi que des fonctions pg_stat_get_* du catalogue pg_catalog.
Des dizaines d'autres paramtres sont disponibles pour slectionner les informations qui
doivent tre envoyes dans le journal d'activit.
Par exemple :
$ pg_dump -h 192.168.2.42 -p 5433 compta > compta.sql
Quelques options :
-C ajouter les commandes pour crer la base de donnes dans l'export
-a n'exporter que les donnes (LMD)
-s n'exporter que le schma (LDD)
-Ft utiliser le format tar
-Fc utiliser le format spcifique
Autres exemples :
$ pg_dump -h host1 db | psql -h host2 db
$ pg_dump db | gzip > db.sql.gz
$ zcat db.sql.gz | psql db
Pour les formats tar et spcifique, la restauration est faite avec pg_restore :
$ pg_dump -Ft db > db.tar
$ dropdb db
$ pg_restore -C -d postgres < db.tar
Le rpertoire de l'instance doit tre sauvegard ainsi que les rpertoires des espaces de
tables supplmentaires.
%f est le nom du fichier qui contient le journal archiver, %p contient son chemin
complet (relativement $PGDATA). La commande doit retourner le code sortie 0 si la
copie a t ralise correctement.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 103
Sauvegarde en continu (journaux des transactions)
Les sauvegardes compltes de l'instance doivent tre ralises d'une manire particulire :
1) Excution de la function SQL pg_start_backup.
2) Sauvegarde des fichiers de l'instances l'exception du rpertoire pg_xlog.
3) Excution de la fonction pg_stop_backup.
Par exemple :
$ psql
postgres=# select pg_start_backup(Sauvegarde du AAAA-MM-JJ);
postgres=# \q
$ tar czfC /mnt/logarch/AAAA-MM-JJ.tar.gz / var/pg/*/inst1
$ psql
postgres=# select pg_stop_backup();
postgres=# \q
La requte ne sera pas excute moins que la clause analyze ne soit utilise. Pour tre
certain de ne modifier aucune donne, utiliser :
bdd=> begin;
bdd=> explain analyze requte;
bdd=> rollback;
Chaque ligne correspond un nud d'excution, pour chaque nud sont affiches les
informations suivantes :
- le type de l'action (parcours squentiel, parcours d'un index, jointure, etc.) ;
- le cot estim pour le dmarrage du parcours ;
- le cot total estim ;
- le nombre estim de lignes renvoyes par le nud d'excution ;
- la largeur moyenne estime des lignes.
Par exemple :
pagila=# explain select count(*) from film where language_id=1;
QUERY PLAN
--------------------------------------------------------------
Aggregate (cost=69.00..69.01 rows=1 width=0)
-> Seq Scan on film (cost=0.00..66.50 rows=1000 width=0)
Filter: (language_id = 1)
(3 rows)
L'optimiseur de requtes les utilisera afin d'laborer le meilleur plan d'excution. Il est
donc important de les mettre jour rgulirement.
Sa syntaxe est :
ANALYZE [ VERBOSE ] nom_table
Par exemple :
pagila=# analyze verbose rental;
INFO: analyzing "public.rental"
INFO: "rental": scanned 134 of 134 pages, containing 16045 live rows
and 7 dead rows; 3000 rows in sample, 16045 estimated total rows
ANALYZE
Les statistiques ainsi chantillonnes ne doivent pas tre confondues avec celles qui sont
maintenues par le collecteur de statistiques (processus stats collector process).
Avant PostgreSQL 8.1, ce processus devait tre planifi intervalles rguliers. Depuis, un
processus (Autovacuum) prend en charge son excution.
La procdure peut tre excute pendant que la base de donnes est utilise. Mais :
- un ralentissement sera perceptible ;
- les instructions qui modifient le schma (LDD) ne pouront pas tre utilises.
L'option full permet de rcuprer tout l'espace libre (dfragmentation), mais le processus
peut s'avrer bien plus long et ncessite la pose d'un verrou exclusif sur les tables.
Les espaces libres dans les fichiers de donnes sont grs par l'intermdiaire d'un
mcanisme connu sous le nom de FSM (Free Space Map).
Un systme de rgles (rules) permet de dtourner l'excution des instructions LMD sur
les relations (tables et vues).
Sites Web
Site officiel http://www.postgresql.org/
Site de la communaut francophone http://www.postgresqlfr.org/
Site du projet pgAdmin http://www.pgadmin.org/
Sbastien Namche
Conseil
Architecture des systmes et rseaux
Scurit transverse
Formation
Logiciels Libres
Systmes Unix
Rseaux et protocoles IP
Base de donnes (Oracle, PostgreSQL, MySQL)
annuaires
Messageries
Supervision