Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
PostgreSQL 8
installation configuration exploitation
v_20080925 (c) 2008, Sbastien Namche (sebastien@nameche.fr)
Plan
La formation suivra ce plan : - introduction ; - partie 1 : installation et configuration ; - partie 2 : structure et organisation des objets au sein d'un serveur PostgreSQL ; - partie 3 : administration des bases de donnes ; - partie 4 : notions avances. 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. Ce support fait rfrence la version 8.3 de PostgreSQL.
Pr-requis
Cette formation est une introduction au serveur de bases de donnes PostreSQL. Elle se focalisera sur les tches d'administration et les spcificits de PostgreSQL par rapport d'autres gestionnaires de bases de donnes. En particulier, on attend de chaque stagiaire : - des connaissances gnrales en administration des systmes informatiques ; - des notions sur les rseaux IP ; - la matrise du langage SQL (LDD et LMD) ; - la matrise d'un diteur de texte.
Introduction
PostgreSQL est un gestionnaire de bases de donnes relationnelles (SGBDR) supportant le langage SQL. Il est a t dvelopp partir du projet Postgres 4.2 initi par l'Universit de Californie Berkeley (UCB), dpartement informatique, ds 1986. Postgres est luimme driv de Ingres. PostgreSQL est dvelopp selon le mode Open Source , sous licence BSD. Plusieurs dizaines de dveloppeurs et des nombreuses entreprises participent au dveloppement. L'quipe rfrente sur le projet reste, elle, indpendante. PostgreSQL dispose notamment des fonctionnalits suivantes : - respect de la norme SQL92 ; - cls trangres ; - plusieurs langages procduraux ; - dclencheurs ; - vues ; - conforme au modle transactionnel ACID.
Versions de PostgreSQL
Les versions marquantes :
1995-05-01 1995-09-05 1997-01-29 1997-06-08 1998-03-01 1998-10-30 1999-06-09 2000-05-08 2001-04-13 2002-02-04 2002-11-27 2008-01-07 2003-11-17 2005-01-19 2005-11-08 2006-12-05 2008-02-04 2008-09-22 Postgres95 0.01 PostgreSQL 1.0 le code devient modifiable PostgreSQL 6.0 changement dans la numrotation, industrialisation du dveloppement PostgreSQL 6.1 nouvel optimiseur PostgreSQL 6.3 subselect, variables d'environnement ct client PostgreSQL 6.4 vues, rgles (rules), UTF rellement utilisable PostgreSQL 6.5 MVCC, sauvegardes chaud, tables temporaires PostgreSQL 7.0 cls trangres, amlioration de l'optimiseur, jointures SQL92 PostgreSQL 7.1 WAL, TOAST, jointures ouvertes, requtes complexes PostgreSQL 7.2 amliore la gestion des bases consquentes, internationalisation PostgreSQL 7.3 schmas, requtes prpares PostgreSQL 7.3.21 PostgreSQL 7.4 dictionnaire, tsearch2, autovacuum, nombreuses optimisations PostgreSQL 8.0 natif Windows, savepoints, PITR, tablespaces, prt pour l'entreprise PostgreSQL 8.1 validation en deux phases, rles PostgreSQL 8.2 nombreuses amliorations fonctionnelles et optimisations PostgreSQL 8.3 encore plus d'amliorations fonctionnelles et d'optimisations PostgreSQL 7.4.22, 8.0.18, 8.1.14, 8.2.10, 8.3.4
Communaut
Le site pgFoundry.org hberge de nombreux projets dvelopps par des quipes indpendantes : - connecteurs pour les diffrents langages ; - langages procduraux ; - outils d'aide l'administration ; - logiciels pour la haute disponibilit (rplication, gestion des connexions, etc.).
Citons : - pgFouine - PGCluster - pgpool - pg-toolbox cration de rapports partir du journal d'activit de PostgreSQL rplication synchrone multi-matres gestion des connexions (limitation, rplication, rpartition, paralllisation) un ensemble de scripts pour l'aide l'administration
Le site franais PostgreSQLFr.fr propose des nouvelles et des traductions de la documentation officielle.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 7
Documentation
La documentation de PostgreSQL est riche et prcise. Elle est consultable en ligne : http://www.postgresql.org/docs/8.3/interactive/index.html Ou disponible au format PDF : http://www.postgresql.org/files/documentation/pdf/8.3/postgresql-8.3-A4.pdf L'association PostgreSQLFr maintient une traduction en ligne : http://docs.postgresql.fr/8.3/ Tlchargeable : http://docs.postgresqlfr.org/8.3/pg833.tar.gz Ou sous forme PDF ou au format d'aide Windows : http://docs.postgresqlfr.org/pg83.pdf http://docs.postgresqlfr.org/8.3/pg833.chm
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 8
MySQL 5 non oui avec InnoDB avec InnoDB oui limits limits non
Oracle 10g oui oui oui oui PL/SQL, Java oui oui oui
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) - 9
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.
[root@pga ~]# ipcs -m -l ------ Shared Memory Limits -------max number of segments = 4096 max seg size (kbytes) = 32768 max total shared memory (kbytes) = 8388608 min seg size (bytes) = 1
En gnral, mais cela dpend des systmes Unix, les paramtres du noyau sont configurs par l'intermdiaire du fichier /etc/sysctl.conf :
kern.shmall = 2097152 kern.shmmax = 134217728 kern.shmmni = 256 (soit 8 Go, car exprim en nombre de blocs) (soit 128 Mo)
4 Configurer l'instance
Le fichier postgresql.conf contient les diffrents paramtres de l'instance. Les valeurs par dfaut permettent d'excuter une instance de taille modeste sans problme particulier. Nous reviendrons sur diffrents paramtres de ce fichier. Pour l'instant, seuls ceux destins configurer les accs rseau nous intressent. 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 paramtre listen_addresses liste les adresses IP sur lesquelles PostgreSQL coutera. Par dfaut seule l'adresse locale 127.0.0.1 sera utilise. Pour permettre la connexion de puis d'autres machines du rseau, il faut donc modifier ce paramtre. Par exemple :
listen_adresses = '*'
Configurer l'authentification
L'authentification est gre par : - le fichier pg_hba.conf ; - les objets rles. 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. Il donc ncessaire de modifier ce fichier la plupart du temps.
Configurer l'authentification
Le format d'une ligne du fichier pg_hba.conf est le suivant :
type base_de_donnes utilisateur addresse mthode option
Les types supports sont : - local : connexion par une socket du domaine Unix (la colonne adresse est vide) ; - host : connexion chiffre ou non par une socket TCP/IP ; - hostssl : connexion chiffrepar une socket TCP/IP ; - hostnossl : connexion non chiffre par une socket TCP/IP. La colonne base_de_donnes peut contenir le nom d'une base de donnes ou : - all ; - samerole ; - une liste de ces lments spars par une virgule. La colonne utilisateur peut contenir le nom d'un utilisateur ou : - all ; - le nom d'un groupe (rle) prcd du caractre + ; - une liste de ces lments spars par une virgule.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 25
Configurer l'authentification
La colonne adresse contient l'adresse IP d'origine de la connexion au format CIDR. Elle doit tre vide lorsque le type de connexion est local. Enfin, la mthode d'authentification est choisie parmi : - trust : autoriser sans mme vrifier le mot de passe ; - reject : rejeter la connexion ; - md5 : vrifier le mot de passe fourni (ne plus utiliser crypt ou password) ; - ident : utiliser le protocole IDENT pour vrifier l'utilisateur ; - krb5, pam ou ldap : authentifications spcifiques. La colonne option n'est employe que lorsque la mthode d'authentification l'exige (par exemple, pour ident ou pam).
Configurer l'authentification
Voici un exemple sens (lire recommand ) pour le fichier pg_hba.conf :
# TYPE local host host DATABASE all all all USER postgres all all CIDR-ADDRESS 192.168.1.0/24 0.0.0.0/0 METHOD ident sameuser md5 reject
Il est important de noter que 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/origine l'emporte. Ce fichier permet l'utilisateur postgres de se connecter en local condition que cette connexion soit ralise par l'utilisateur du systme qui porte le mme nom. Les connexions partir du rseau 192.168.1.0/24 seront autorises mais ncessiteront un mot de passe. Un utilisateur (rle) devra exister pour cela dans l'instance. Toutes les autres connexions seront refuses.
Si PostgreSQL a t install avec un paquet d'une distribution, il est prfrable d'utiliser les scripts fournis. Sous Debian :
# /etc/init.d/postgresq-8.1 start/stop/status/reload
Processus de l'instance
Les processus associs l'instance sont les suivantes :
# ps faux postgres 30603 postgres 30605 postgres 30606 postgres 30607 postgres 30608 postgres 30617 ? ? ? ? ? ? S /usr/local/postgresql834/bin/postmaster -D /var/pg/u01/inst1 Ss \_ postgres: writer process Ss \_ postgres: wal writer process Ss \_ postgres: autovacuum launcher process Ss \_ postgres: stats collector process Ss \_ postgres: postgres postgres 127.0.0.1(35342) idle
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.
5 Configurer le dmarrage
Sous Unix, lorsque PostgreSQL est compil, les scripts de dmarrage ne sont pas installs. Pour Linux, un script de dmarrage est disponible dans le rpertoire contrib/start-scripts du code source. 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/postgresl_inst1 /etc/rc2.d/S30postresql_inst1 # ln -s /etc/init.d/postgresl_inst1 /etc/rc0.d/K70postresql_inst1 # ln -s /etc/init.d/postgresl_inst1 /etc/rc6.d/K70postresql_inst1
Instances supplmentaires
Pourquoi utiliser de nouvelles instances : - pour excuter des versions diffrentes de PostgreSQL ; - pour excuter des instances de PostgreSQL avec des paramtres diffrents ; - pour des environnements diffrents (dveloppement, pr-production, production) ; - pour isoler des bases de donnes. Pour crer une nouvelle instance sur le mme serveur, il faut : 1) Choisir un port TCP et un rpertoire diffrent pour l'instance. 2) Crer les fichiers de l'instance avec initdb. 3) Modifier la configuration de l'instance. 4) Installer le script de dmarrage.
Instances supplmentaires
Par exemple :
# su - postgres $ initdb --encoding=UTF8 --locale=C --pwprompt /var/pg/u01/inst2 $ vi /var/pg/u01/inst2/postgresql.conf Modifier la variable suivante : port = 5433 $ exit # cp /etc/init.d/postgresql_inst1 /etc/init.d/postgresql_inst2 # vi /etc/init.d/postgresql_inst2 Modifier la variable suivante : PGDATA="/var/pg/u01/inst2" # ln -s /etc/init.d/postgresl_inst2 /etc/rc2.d/S30postresql_inst2 # ln -s /etc/init.d/postgresl_inst2 /etc/rc0.d/K70postresql_inst2 # ln -s /etc/init.d/postgresl_inst2 /etc/rc6.d/K70postresql_inst2
Sessions
Les clients se connectent au serveur par l'intermdiaire d'une socket Unix ou d'une socket TCP (sur le port 5432 par dfaut). Deux informations sont ncessaires pour ouvrir une session : - le nom d'une base de donnes ; - le nom d'un rle. Un mot de passe est requis selon la configuration de pg_hba.conf. 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.
Sessions
Pour utiliser des sessions chiffres en SSL, trois tapes sont ncessaires : 1) Gnrer une cl prive et un certificat x509 pour le serveur. 2) Activer l'option ssl dans le fichier postgresql.conf de l'instance. 3) Redmarrer l'instance. La cl prive et le certificat x509 doivent tre enregistrs respectivement dans les fichiers server.key et server.crt du rpertoire de l'instance. Par exemple, pour gnrer un certificat auto-sign avec OpenSSL :
# # # # # cd /var/pg/u01/inst1 openssl req -new -text -nodes -out server.req -keyout server.key openssl req -x509 -in server.req -text -key server.key -out server.crt chown postgres server.* chmod 600 server.key
Clients
Plusieurs outils sont installs avec PostgreSQL :
clusterdb createdb createlang createuser dropdb droplang dropuser ecpg initdb ipcclean pg_config pg_controldata pg_ctl pg_dump pg_dumpall pg_resetxlog pg_restore postgres postmaster psql reindexdb vacuumdb vacuumlo
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=#
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 36
Client psql
En plus des instructions SQL LDD et LMD, l'interprteur psql comprend certaines commandes qui lui sont propres. Ces commandes sont prcdes du caractre \ . Voici celles qui sont le plus souvents utilises :
- \q quitter psql - \c [nombdd|- utilisateur|- machine|- port|-] se connecter une autre instance PostgreSQL - \i fichier excuter un fichier SQL - \o fichier envoyer la sortie vers un fichier - \d nom dcrire une table, index, sequence, or view - \d{t|i|s|v|S} [modle] lister tables/indexes/squences/vues/objets systme - \db [modle] lister les espaces de tables - \du [modle] lister les utilisateurs - \dg [modle] lister les groupes - \dn [modle] lister les schmas - \l lister toutes les bases de donnes - \z nom afficher les privilges - \? lister les commandes de psql - \h instruction obtenir de l'aide sur une instruction SQL - \encoding obtenir ou configurer l'encodage pour la session
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 37
Client pgAdminIII
Client pgAdminIII
L'installation de pgAdminIII dpend du systme d'exploitation. Pour Debian :
# apt-get install pgadmin3
Des versions compiles sont disponibles pour FreeBSD, Mac OS X et certaines distributions de Linux cet endroit : http://www.postgresql.org/ftp/pgadmin3/release/ Pour RedHat, CentOS et Fedora, le dpt de logiciels Dag en fournit une version cette adresse : http://dag.wieers.com/rpm/packages/pgadmin3/ Par exemple, sous CentOS ou RHEL 5 :
# wget http://dag.wieers.com/rpm/packages/pgadmin3/pgadmin3-1.4.3-1.el5.rf.i386.rpm # rpm -ivh pgadmin3-1.4.3-1.el5.rf.i386.rpm
Pour Windows, pgAdminIII est compris dans le paquet d'installation prsent prcdemment.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 39
Client pgAdminIII
Afin de pouvoir utiliser toutes les fonctions de pgAdminIII, il est ncessaire de crer certaines fonctions dans chaque base de donnes. Le paquet postgresql-contrib fournit les fichiers ncessaires pour cela, notamment le fichier adminpack.sql. Par exemple, sous CentOS 5, il suffit d'excuter :
# su - postgres $ psql base_de_donnes < /usr/share/pgsql/contrib/adminpack.sql
Client phpPgAdmin
Le client d'administration pgAdmin requiert un accs direct au serveur via le port TCP 5432. Cela n'est pas toujours possible, ni souhaitable. L'application Web phpPgAdmin peut tre utilise dans cette situation. Il s'installe sur le serveur. Il est disponible cette adresse : http://phppgadmin.sourceforge.net Son installation requiert un serveur Web et le langage PHP avec l'extension pgsql.
Client phpPgAdmin
Partie 2
Notion de OID
Les OID (Object Identifiers) sont utiliss par PostgreSQL pour la cl primaire d'un certain nombre de tables systme. 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 .../... postgres=# select oid, datname from pg_database; oid | datname -------+----------1 | template1 11510 | template0 11511 | postgres 16395 | bla (4 rows)
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 45
$PGDATA/base rpertoire associ l'espace de tables pg_default $PGDATA/base/oid rpertoire de la base de donnes associes l'OID oid $PGDATA/base/pgsql_tmp fichiers temporaires pour certaines oprations $PGDATA/global $PGDATA/pg_clog $PGDATA/pg_log $PGDATA/pg_multixact $PGDATA/pg_subtrans $PGDATA/pg_tblspc $PGDATA/pg_twophase $PGDATA/pg_xlog tables systme (espace de tables pg_global) donnes relatives au statut de validation des transactions journaux d'activit donnes relatives au statut des transactions multiples donnes relatives au statut des transactions imbriques contient un lien symbolique pour chaque espace de tables donnes pour les transactions prpares journaux binaires (WAL)
La base de donnes postgres fait exception la rgle, ses relations sont enregistres dans le rpertoire $PGDATA/global. Ce rpertoire contient les fichiers suivants :
$PGDATA/global pg_auth pg_control pg_database pgstat.stat oid fichier texte, copie des identifiants et mots de passe des rles utilisateurs positions et donnes de contrle des journaux et transactions fichier texte, copie des bases de donnes prsentes dans l'instance statistiques collectes par PostgreSQL OID de la relation associe
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 47 (c) 2008, Sbastien Namche (sebastien@nameche.fr) - 47
LDD/LMD
Le langage SQL est constitu de deux sous-ensembles : - le Langage de Description des Donnes (LDD) ; - le Langage de Manipulation des Donnes (LMD). 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 sousensemble 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. Le langage de manipulation des donnes permet d'ajouter, modifier, supprimer et rcuprer les donnes qui sont stockes dans les objets crs avec le langage de description des donnes. Ce sous-ensemble est reprsent par les verbes : insert select update delete
Bases de donnes
instance client
port TCP 5432 rles
base de donnes 1
schma 1 relations
base de donnes 2
schma 1 relations
schma 2 relations
schma 2 relations
pg_global
pg_default
tblspc1
tblspc2
disque 1
disque 2
disque 3
Bases de donnes
La cration d'une base de donnes se fait avec l'instruction :
CREATE DATABASE nom [ [ WITH ] [ OWNER [=] utilisateur ] [ TEMPLATE [=] modle ] [ ENCODING [=] encodage ] [ TABLESPACE [=] espace_de_tables ]
Le propritaire par dfaut est l'utilisateur connect. La base de donnes modle par dfaut est template1. L'encodage par dfaut est celui de l'instance. D'autres sont UTF8, WIN1252, LATIN1, LATIN9 et SQL_ASCII. L'espace de tables par dfaut est pg_default. Seul un administrateur ou un utilisateur qui dispose l'attribut CREATEDB peut crer une base de donnes (mais elle lui appartiendra obligatoirement). 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) - 50
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=#
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 51
Schmas
Les schmas sont simplement des espaces de noms. Ainsi, il est possible de crer dans une mme base de donnes des objets qui portent le mme nom tant qu'ils le sont dans des schmas diffrents. 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 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.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 52
Schmas
Pour dtruire un schma :
DROP SCHEMA [ IF EXISTS ] nom [ CASCADE ]
Seuls un administrateur et le propritaire du schma peuvent le dtruire. L'option CASCADE permet la suppression d'un schma qui contient des objets. 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.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 53
entier sur 2 octets entier sur 4 octets entier sur 8 octets numrique exacte virgule flotante sur 4 octets virgule flotante sur 8 octets date heure date et heure intervalle de temps
Relations, tables
Les tables sont cres ainsi :
CREATE [ TEMPORARY ] TABLE nom_table ( nom_colonne nom_type [ DEFAULT expression ] [ contrainte ] [, ...] [ contrainte_table [, ...] ] ) [ WITH ( parametre_stockage [= valeur] [, ... ] ) ] [ TABLESPACE tablespace ]
[ CONSTRAINT nom_contrainte ] { UNIQUE ( colonne [, ... ] | PRIMARY KEY ( colonne [, | CHECK ( expression ) | FOREIGN KEY ( colonne [, REFERENCES autre_table [ ON DELETE action ] [
Relations, index
Les indexes peuvent tre ajouts une table dj cre :
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] nom ON nom_table ( { colonne | ( expression ) } [, ...] ) [ WITH ( parametre_stockage = valeur [, ... ] ) ] [ TABLESPACE tablespace ]
Relations, squences
Les squences sont des objets qui fournissent des suites d'entiers garantis uniques et ce travers les transactions. Pour crer une squence :
CREATE [ TEMPORARY ] SEQUENCE nom [ INCREMENT [ BY ] increment ] [ MINVALUE valeur ] [ MAXVALUE valeur ] [ START [ WITH ] valeur ] [ [ NO ] CYCLE ] [ OWNED BY table.colonne } ]
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)
Relations, vues
Pour crer une vue, la syntaxe est :
CREATE [ OR REPLACE ] [ TEMPORARY ] VIEW nom [ ( nom_colonne [, ...] ) ] AS requte
L'instruction copy
L'instruction copy permet de transfrer un nombre important de lignes d'une table vers un fichier ou inversement. Pour copier les lignes d'un fichier vers une table :
COPY table [ (colonnes) ] FROM { 'nom_fichier' | STDIN } [ DELIMITER 'sparateur' ] [ NULL 'chane nulle' ] [ CSV [ HEADER ] [ QUOTE 'quote' ] [ ESCAPE 'escape' ] ]
Seul un utilisateur de la base de donnes disposant des privilges administrateur peut utiliser un nom de fichier. De plus, ce fichier doit se trouver sur le serveur et est tre accessible en lecture ou en criture par le serveur PostgreSQL.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 60
Transactions
PostgreSQL implmente les transactions conforment au standard ACID :
Atomicit Cohrence Isolation Durabilit toutes les instructions de la transaction sont valides ou aucune ne l'est chaque transaction valide garantit un tat cohrent de la base de donnes les modifications d'une transaction sont invisibles aux autres transactions si la transaction est valide, les modifications engendres sont prennes
Par dfaut, chaque instruction est ralise dans le cadre d'une transaction qui est automatiquement valide. Pour commencer une nouvelle transaction, il faut utiliser explicitement l'instruction begin. Les instructions commit et rollback permettent respectivement de valider et d'annuler la transaction. Les instructions LDD sont prises en charge par les transactions. La fermeture d'une session provoque un rollback implicite.
Niveaux d'isolation
Le standard SQL dfinit quatre niveaux d'isolation entre les transactions : read uncommited read commited repeatable read serializable dirty read possible impossible impossible impossible non-repeatable read possible possible impossible impossible phantom read possible possible possible impossible
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'instruction est set transaction :
SET TRANSACTION ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
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.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 62
Verrous
L'utilisation des verrous est devenue inutile grce MVCC. 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. Les verrous peuvent tre poss : - avec l'instruction lock ; - en utilisant les clauses for update et for share de l'instruction select. 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) - 63
D'autres fonctions permettent de classer les rsultats (ts_rank et ts_rank_cd) ou mme de mettre en valeur dans le texte les termes recherchs (ts_headline).
Rles
Pour grer l'ensemble des droits d'accs, PostgreSQL utilise le concept des rles. Un rle peut reprsenter un utilisateur ou un groupe d'utilisateurs en fonction de la manire dont il est configur. 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.
Rles
Pour crer un rle :
CREATE ROLE nom_role [ [ WITH ] [ [ [ [ [ SUPERUSER ] [ CREATEDB ] CREATEROLE ] [ LOGIN ] ENCRYPTED PASSWORD 'mot_de_passe' ] IN ROLE nom_role [, ...] ] ROLE nom_role [, ...] ] ]
Seul l'administrateur ou un utilisateur disposant de l'attribut CREATEROLE peut crer un rle. Par exemple, pour crer un rle modlisant un utilisateur, on utilisera :
postgres=# create role sebastien login encrypted password 'blabla'; postgres=# \c postgres sebastien Password for user "sebastien": You are now connected to database "postgres" as user "sebastien". postgres=>
Rles, groupes
Les rles sont galement utiliss pour modliser la notion de groupes d'utilisateurs. Il suffit pour cela de crer un rle sans mot de passe et ne disposant pas du privilge LOGIN. 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;
Droits
Le systme des droits de PostgreSQL est bas sur les rles et utilise les instructions SQL GRANT et REVOKE. Ces instructions sont utilises pour : - octroyer ou rvoquer des droits d'accs sur des objets ; - ajouter ou retirer des rles (utilisateurs) d'autres rles (groupes). Les rles dispose galement d'un certains nombres d'attributs : - LOGIN / NOLOGIN ; - SUPERUSER / NOSUPERUSER ; - CREATEDB / NOCREATEDB ; - CREATEROLE / NOCREATEROLE ; - PASSWORD. 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).
Les privilges octroys dpendent du type d'objet : - tables : SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER - squences : USAGE | SELECT | UPDATE - base de donnes : CREATE | CONNECT | TEMPORARY - fonctions : EXECUTE - langage : USAGE - schmas : CREATE | USAGE - espaces de tables : CREATE ALL reprsente tous les privilges et PUBLIC tous les rles. L'option WITH GRANT OPTION autorise le ou les rles cibles octroyer ces privilges.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 70
Par exemple, pour rvoquer tous les droits sur le schma public :
revoke all on schema public from public;
Espaces de tables
Un espace de tables (ou tablespace) est un rpertoire du systme de fichiers qui peut tre utilis pour stocker les donnes de relations (tables et indexes). Ils sont utiliss pour deux raisons : 1) Pour tendre des bases de donnes contraintes par la taille d'un systme de fichiers qui ne peut tre agrandi. 2) Plus frquemment, pour optimiser la vitesse d'excution des requtes en stockant, par exemple, les tables sur un disque et les indexes sur un autre. Les espaces de tables sont associs l'instance, ils sont dons disponibles pour l'ensemble des bases de donnes de l'instance.
Espaces de tables
Pour crer un espace de tables :
CREATE TABLESPACE nom [ OWNER utilisateur ] LOCATION 'rpertoire'
Seul l'administrateur peut crer un espace de tables. Le propritaire par dfaut est l'utilisateur connect. Le rpertoire doit exister et l'utilisateur systme qui excute PostgreSQL doit y avoir accs en criture. Sous psql, \db permet de lister les espaces de tables existants. Ou :
SELECT spcname FROM pg_tablespace;
Seul un administrateur ou son propritaire peut dtruire un espace de tables. Pour supprimer un espace de tables :
DROP TABLESPACE [ IF EXISTS ] nom
Il ne peut l'tre s'il contient des objets. Mais il est possible de dplacer une table d'un espace de tables un autre :
ALTER TABLE nom_table SET TABLESPACE nom_espace
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 76
Espaces de tables
Par exemple :
# mkdir -m 700 /var/pg/u02/inst1 # chown postgres:postgres /var/pg/u02/inst1 # su - postgres -c psql Bienvenue dans psql 8.2.7, l'interface interactive de PostgreSQL. postgres=# create tablespace tbl_data location '/var/pg/u02/inst1'; CREATE TABLESPACE postgres=# \c test You are now connected to database "test". test=# \db List of tablespaces Name | Owner | Location ------------+----------+------------------pg_default | postgres | pg_global | postgres | tbl_data | postgres | /var/pg/u02/inst1 (3 rows) test=# create table big_data (id int, data text) tablespace tbl_data; CREATE TABLE postgres=# \!ls -l /var/pg/u02/inst1 total 8 drwx------ 2 postgres postgres 4096 jan 23 11:56 16390 -rw------- 1 postgres postgres 4 jan 23 11:50 PG_VERSION
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 77
Langages procduraux
Pour crire des procdures stockes excutables sur le serveur de bases de donnes, PotgreSQL permet l'utilisation de plusieurs langages, notamment : - PL/pgSQL, le langage procdural fournit avec PostgreSQL ; - PL/Perl ; - PL/Python ; - PL/Tcl ; - PL/Java. 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)
Langages procduraux
Pour obtenir la liste des langages disponibles pour une base de donnes :
postgres=# select tmplname, tmpltrusted from pg_pltemplate; tmplname | tmpltrusted -----------+------------plperl | t plperlu | f plpgsql | t plpythonu | f pltcl | t pltclu | f (6 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
PL/pgSQL, fonctions
Par exemple, si le fichier repete.sql contient ce code :
create function repete(str varchar, nb int) returns varchar as $$ declare res varchar := ''; begin for i in 1..nb loop res := res || str; end loop; return res; end; $$ language plpgsql;
PL/pgSQL, procdures
Les procdures PostgreSQL sont des fonctions qui retournent void. Par exemple :
drop table if exists scores; create table scores ( equipe varchar(20), points int ); create or replace function maj_points( i_equipe varchar, i_score int ) returns void as $$ begin update scores set points = points + i_score where equipe = i_equipe; if not found then insert into scores ( equipe, points ) values ( i_equipe, i_score ); end if; end; $$ language plpgsql;
Dclencheurs
Les dclencheurs (ou triggers) sont des fonctions qui sont excutes automatiquement lorsqu'une action spcifique (insertion, mise--jour, suppression d'enregistrements) a lieu sur une table. Les dclencheurs sont crs avec cette instruction SQL :
CREATE TRIGGER nom [ BEFORE | AFTER ] { vnement [ OR ... ] } ON table [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE PROCEDURE fonction ( paramtres )
Les vnements autoriss sont INSERT, UPDATE ou DELETE. Une image de l'enregistrement en cours de traitement est disponible dans les pseudoenregistrements 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.
Les extensions en C
Le serveur PostgreSQL est extensible : il est possible d'crire de nouvelles fonctions en C et de les compiler sous forme de bibliothques dynamiques utilisables ensuite dans les instructions SQL. Une fois la bibliothque compile et place au bonne endroit, il suffit d'utiliser l'instruction create function ainsi :
CREATE [ OR REPLACE ] FUNCTION nom ( [ paramtres... ] ) [ RETURNS type ] LANGUAGE c AS 'fichier', 'symbole'
Partie 3
Administration, exploitation
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
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 92
Gestion de la mmoire
Il y a essentiellement six paramtres importants : shared_buffers (32 Mo par dfaut, mmoire partage) Tampons de mmoire partage entre tous les processus (ne peut dpasser SHMMAX). La valeur de ce paramtre a un impact important sur les performances. temp_buffers (8 Mo par dfaut, mmoire locale) Taille maximum des tampons locaux pour l'accs aux tables temporaires. work_mem (1Mo par dfaut, mmoire locale) Mmoire utilise pour les oprations de tri et hash en avant utilisation du disque. maintenance_work_mem (16Mo, mmoire locale) Mmoire utilise pour les oprations de maintenance (vacuum, create index, etc.) Peu d'utilisations simultanes, possibilit d'augmenter significativement. max_stack_depth (2Mo par dfaut, mmoire locale) Taille maximum de la pile d'excution (utiliser ulimit -s moins 1 ou 2 Mo). Peut gner l'excution de requtes ou procdures complexes si trop faible. wal_buffers (64 Ko par dfaut, mmoire partage) Doit tre assez grand pour stocker les donnes d'une transaction type.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 93
Le collecteur de statistiques
Le collecteur de statistiques est un processus (stats collector process) qui maintient un certains nombres de compteurs qui aident l'optimiseur de requtes fournir des plans d'excution optimaux. Ces indicateurs sont galement utiles pour l'administration de la base de donnes. La collecte des statistiques est active avec le paramtre track_counts. 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. La fonction pg_stat_reset permet de rinitialiser les statistiques de la base de donnes active.
Le journal d'activit
Le journal d'activit est l'endroit o PostgreSQL consigne l'ensemble des messages gnrs pendant son excution, du plus insignifiant l'erreur fatale selon la configuration des paramtres du fichier postgresql.conf : log_destination logging_collector log_directory log_statement une combinaison de stderr, csvlog, syslog et eventlog (Windows) active l'envoi des messages vers des fichiers rpertoire dans lequel seront enregistrs ces fichiers crire les requtes excutes (none, ddl, mod ou all)
Des dizaines d'autres paramtres sont disponibles pour slectionner les informations qui doivent tre envoyes dans le journal d'activit.
Catalogue systme
Le catalogue pg_catalog contient notamment : - l'ensemble des fonctions et types implmentes par le moteur de PostgreSQL ; - un ensemble de tables dont certaines en criture servent contrler certains aspects du fonctionnement du serveur ; - un ensemble de vues permettant de comprendre le comportement de l'instance.
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.
Sauvegardes
Trois stratgies de sauvegardes sont possibles : 1) Export partir d'une base de donnes active en utilisant le programme pg_dump. 2) Sauvegarde des fichiers de l'instance lorsqu'elle est arrte. 3) Archivage des journaux des transactions. L'outil pg_dump est intressant car : - il permet de transfrer rapidement des donnes entre bases de donnes ; - il support trois types de format, dont le SQL ; - il est simple d'emploi. Mais il ne peut sauvegarder des bases de taille importante.
Sauvegardes, pg_dump
La commande pg_dump exporte une base de donnes d'une instance. Elle peut tre excute sur le serveur PostgreSQL (connexion par socket Unix) ou partir d'une machine du rseau (avec les mmes options -h et -p que psql). L'outil pg_dump supporte trois types de format : 1) Format texte (par dfaut), les donnes seront restaures avec psql. 2) Format tar, les donnes seront restaures avec pg_restore. 3) Format spcifique, restauration avec pg_restore. 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
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 98
Sauvegardes, pg_restore
Pour restaure un export ralis au format texte :
$ pg_dump -h 192.168.2.42 -p 5433 -U postgres -C compta > compta.sql $ psql -h 192.168.2.42 -p 5433 -U postgres postgres < compta.sql
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 $ pg_dump -Fc db > db.dump $ dropdb db $ pg_restore -C -d postgres < db.dump $ pg_dump -Fc db > db.dump $ createdb copy $ pg_restore -d copy < db.dump
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 99
%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) - 101
L'tiquette est conserve dans le fichier $PGDATA/backup_label. Un fichier $PGDATA/pg_xlog/0000000100001234000055CD.007C9330.backup est cr pour indiquer le dernier journal utilis avant la sauvegarde.
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.
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 104
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).
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 108
Vacuum
Le processus nomm Vacuum (littralement aspirateur ) doit tre excut rgulirement sur une base de donnes PostgreSQL. Il permet de : - rcuprer l'espace libr suite la mise--jour ou la suppression d'enregistrements ; - mettre jour les statistiques utilises par l'optimiseur de requtes (analyze) ; - prvenir la perte d'anciennes donnes par la rotation des identifiants de transaction. 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. Pour rduire le temps ncessaire l'excution de Vacuum, certains paramtres peuvent tre ajusts. Par exemple, les tables qui contiennent des enregistrements qui sont peu modifis et rarement supprims n'ont pas besoin d'tre nettoyes aussi souvent que d'autres tables plus volatiles .
Autovacuum
Pour excuter le processus vacuum manuellement, la syntaxe est :
VACUUM [ FULL ] [ ANALYZE ] table
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. L'option analyze dclenche, en plus, l'chantillonnage des statistiques. partir de la version 8.1 de PostgreSQL, un dmon, pg_autovocuum (processus autovacuum launcher process), est charg d'excuter rgulirement les processus vacuum et analyze sur les tables de l'instance. Pour le configurer, modifier ces paramtres de postgresql.conf :
autovacuum = on superuser_reserved_connections = 4 autovacuum_naptime = 5min
Optimisation
L'optimisation d'une base de donnes dpend de plusieurs paramtres : - le schma de la base de donnes (tables, index, vues, dclencheurs) ; - sa volumtrie ; - son usage (OLTP, data warehouse). Les informations utiles sont obtenues : - dans le journal d'activit ; - dans les objets du catalogue pg_catalog ; - en excutant l'instruction explain ; - partir du rsultat de l'instruction vacuum. Les rglages sur lesquels il est possible d'intervenir sont : - les paramtres du fichier postgresql.conf ; - le matriel (mmoire, disques durs, processeur) ; - les paramtres du systme d'exploitation.
Partie 1
Notions avances
(c) 2008, Sbastien Namche (sebastien@nameche.fr) - 112 (c) 2008, Sbastien Namche (sebastien@nameche.fr) - 112
Une interface Web, pgPoolAdmin, peut tre utilise pour la gestion de pgPool.
Notions avances
PostgreSQL gre les types avancs suivants : - domaines ; - tableaux ; - types composites. Les relations (tables) peuvent hrites les unes des autres. Le mcanisme Toast permet de stocker des lignes de taille importante. 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). Le langage procdural PL/pgSQL dispose de la notion de curseur.
Rfrences
Livres PostgreSQL 2me dition - Sbastien Lardire ENI ditions 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/
Formation
Logiciels Libres Systmes Unix Rseaux et protocoles IP Base de donnes (Oracle, PostgreSQL, MySQL) annuaires Messageries Supervision