You are on page 1of 37

Premiers pas avec PostgreSQL

version 9.0

Premiers pas avec PostgreSQL

1/37

Table of Contents
I Introduction.......................................................................................................................................4 A.Pourquoi ce document?...............................................................................................................4 B. qui s!adresse ce document?......................................................................................................4 ".Licence du document #................................................................................................................$ II Pr%sentation de PostgreSQL............................................................................................................$ 1.Licence....................................................................................................................................$ &."aract%ristiques et 'onctionna(it%s #........................................................................................$ III Insta((ation......................................................................................................................................) A.*oca+u(aire..................................................................................................................................) 1.Base.........................................................................................................................................) &."(uster ,ou grappe de +ase de donn%es-..................................................................................) 3.Sc.%ma....................................................................................................................................) B.Principes de +ase.........................................................................................................................) 1."omptes s/st0me.....................................................................................................................) &.12(es........................................................................................................................................) 3.*ersions ,mineures/ma3eures-.................................................................................................7 4."(ient/serveur..........................................................................................................................7 $.Processus serveur....................................................................................................................7 ).4odu(e de contri+ution...........................................................................................................7 ".56emp(e.......................................................................................................................................7 8.Sous 9indo:s.............................................................................................................................7 1.;< trouver PostgreSQL pour 9indo:s?.................................................................................7 &.Insta((ation...............................................................................................................................7 5.Sous Linu6.................................................................................................................................17 1.8e+ian/=+untu......................................................................................................................17 &.1ed.at/"ent ;S/>edora........................................................................................................1? 3."ompi(ation des sources.......................................................................................................&@ >.Autres.........................................................................................................................................&@ I* Apr0s (!insta((ation........................................................................................................................&@ A.Processus et emp(acement des 'ic.iers.....................................................................................&@ B.".anger (e mot de passe de (!uti(isateur s/st0me postgres........................................................&& "."r%er un c(uster de +ase de donn%es.........................................................................................&& 8.Autoriser (es conne6ions...........................................................................................................&& 1."onne6ions r%seau ,postgresq(.con'-....................................................................................&& &.Aut.enti'ication des c(ients ,pgA.+a.con'-...........................................................................&3 3.Prise en compte des param0tres de con'iguration.................................................................&4 4."r%er une +ase.......................................................................................................................&$ $."r%er un r2(e et (ui donner des droits sur une +ase...............................................................&$ 5.SuperButi(isateur........................................................................................................................&7 >.Ce ne peu6 pas me connecter D (a +ase? Que 'aire?....................................................................&7 E.;< se trouve (a (og ? "omment (a con'igurer?.........................................................................&7 F.ArrGter/d%marrer (e serveur PostgreSQL..................................................................................&7 * ;uti(s..............................................................................................................................................&7 A.;uti( grap.ique # pgAdmin3.....................................................................................................&7 B.psq( ,outi( en (igne de commande-............................................................................................&? Premiers pas avec PostgreSQL &/37

1.9indo:s #.............................................................................................................................&? &.Sous Linu6 # .........................................................................................................................3@ 3.1emarques # ..........................................................................................................................3@ 4."ommandes ..........................................................................................................................3@ ".p.pPgAdmin.............................................................................................................................3@ 8."op/..........................................................................................................................................31 *I 8%ve(oppement.............................................................................................................................31 A.SQL...........................................................................................................................................31 B.Proc%dures stocH%es..................................................................................................................31 ".C8B".........................................................................................................................................31 8.Autres ,P51LI P/t.onI .JetI ;8B"I Kc(...-.............................................................................3& 5.A savoir L...................................................................................................................................3& 1.4a3uscu(es/minuscu(es.........................................................................................................3& &.5rreurs et transactions...........................................................................................................33 3.Savepoints.............................................................................................................................34 4.88L dans (es transactionsL...................................................................................................34 $."ount,M-................................................................................................................................3$ *II 5t apr0s?......................................................................................................................................3$ A.Lire (a documentation #.............................................................................................................3$ B.Sites uti(es #...............................................................................................................................3$ ".Pour trouver de (!aide comp(%mentaire #...................................................................................3$ 1.Listes de di''usion #...............................................................................................................3$ &.>orum de (a communaut% 'rancop.one #...............................................................................3) 3.1emarque # comment poser vos questions?.........................................................................3)

Premiers pas avec PostgreSQL

3/37

I Introduction
A. Pourquoi ce document?
C!ai commenc% D d%ve(opper sous PostgreSQL asseN r%cemment apr0s une (ongue e6p%rience sous ;rac(e. La documentation g%n%ra(e de PostgreSQL est e6ce((enteI et tr0s ric.eI mais 3!avais +esoin d!un document p(us (%ger e6p(iquant (a proc%dure d!insta((ation sur di''%rents s/st0mes et comment d%marrer ,cr%er un c(usterI con'igurer (es conne6ions-I ainsi que des in'ormations sur ce qu!on pouvait 'aire avec PostgreSQL. Ce ne (!ai pas trouv%. Apr0s que(ques mois d!uti(isationI 3e me suis rendu compte que (es pro+(0mes des d%+utants %taient tou3ours (es mGmes. AinsiI 3!ai compi(% mes notes des d%+uts et ce que 3!ai appris depuis dans ce document. *oici (e r%su(tatI en esp%rant qu!i( vous aide D d%+uter et qu!i( vous encourage D continuer avec PostgreSQL.

B. qui s'adresse ce document?


"e document a pour +ut de vous aider D insta((er PostgreSQL sous 9indo:s ou sous Linu6I et D commencer D d%ve(opper. I( est %crit pour vous 'aire gagner du temps dans vos premiers pas avec PostgreSQLI tout en vous e6p(iquant (es points importants a'in que vous puissieN progresser par vousBmGme. I( s!adresse donc principa(ement au6 d%ve(oppeurs d!app(icationsI a'in de (eur permettre de d%couvrir ce puissant moteur sur une petite +ase de testI ou au6 personnes qui d%+utent comp(0tement avec PostgreSQL. *ous n!aureN pas +esoin de connaissances s/st0me avanc%es pour suivre ce document. =ne 'ois que vous aureN termin% (a (ecture de ce documentI vous pourreN continuer par (a (ecture de (a documentation o''icie((e pour apprendre D administrer PostgreSQL ou devenir un d%ve(oppeur aguerri. La derni0re section de ce document vous donne (es (iens et r%'%rences n%cessaires pour continuer D progresser. Par'ois (es in'ormations ne sont vo(ontairement pas comp(0tesI et (orsque (a documentation de r%'%rence est p(us c(aire et pr%cise que ce qui aurait pu Gtre 'ait iciI (es (iens sont 'ournis vers (a documentation 'ranOaise. "e document a %t% %crit initia(ement pour (a version 7.3I puis mis D 3our pour (a version ?.@ ,voir (e c.apitre sur (es versions-. Avertissement # ce document n!est en aucun cas un document sur (e tuning de (a +ase. I( n!est pas 'ait non p(us pour vous apprendre D administrer une +ase de production.

Premiers pas avec PostgreSQL

4/37

C. Licence du document :

Euide de d%marrage rapide avec Postgresq( +/ >(orence "ousin est mis D disposition se(on (es termes de (a (icence "reative "ommons Paternit% &.@ >rance. cousin'(o c.eN 'ree point 'r

II Prsentation de PostgreSQL
PostgreSQL est un moteur de +ases de donn%es re(ationne((e. "!est un moteur adapt% D des +ases m%tierI donc ric.e en 'onctionna(it%s et puissant. Son insta((ation est cependant p(ut2t simp(e. I( 'aut 3uste comprendre que(ques principes de +ase ,ce que cette pr%sentation s!e''orce de 'aireSi vous ne connaisseN pas (es principes re(ationne(s ou (e SQLI (e mieu6 est de vous procurer un +on ouvrage sur (e su3et. L!artic(e de 9iHipedia peut Gtre une +onne introduction ,.ttp#//'r.:iHipedia.org/:iHi/SQL-I et donne de nom+reuses r%'%rences. Le tutorie( de (a documentation PostgreSQL peut %ga(ement vous rendre service si vous aveN +esoin de vous ra'raPc.ir (a m%moire # .ttp#//docs.postgresq('r.org/?.@/tutoria(Bsq(..tm(

1.

Licence

La (icence de PostgreSQL est une (icence de t/pe BS8I ce qui permet son uti(isation sans restrictionI dans un (ogicie( (i+re ou propri%taire. "!est un avantage certainI car ce(a permet par e6emp(e d!uti(iser PostgreSQL comme +ase de donn%es pour un (ogicie( propri%taire. PostgreSQL est un pro3et ind%pendant. I( n!est d%tenu par aucune entreprise. La communaut% PostgreSQL est tr0s r%active ,a((eN voir (es mai(ingsB(ists si vous vou(eN v%ri'ier-. 8e nom+reuses entreprises soutiennent et participent %ga(ement au d%ve(oppement de PostgreSQL.

2.

Caractristiques et fonctionnalits :

PostgreSQL comporte de nom+reuses 'onctionna(it%s int%ressantes. Parmi ce((esBciI on peut citer par e6emp(e # moteur transactionne( respect des normes SQL 4*"" ,m%canisme permettant une concurrence e''icace sans verroui((er (es enregistrements pour assurer (!iso(ation des transactions proc%dures stocH%es dans de nom+reu6 (angages triggers r%p(ication maPtreBesc(aves en continu par app(ication des 3ournau6 +inaires ,arc.ives 9AL-I esc(aves accessi+(es en (ecture. Premiers pas avec PostgreSQL $/37

PostgreSQL est conOu pour Gtre ro+uste ,aucune version ne sort sans avoir su+i une suite e6tensive de tests- et peut supporter des vo(umes importants de donn%es ,ainsi par e6emp(e 4%t%o >rance g0re une +ase de 3I$Ko-. PostgreSQL est conOu pour pouvoir supporter des e6tensions. 8es e6tensions et outi(s sont disponi+(es pour comp(%ter (e moteurI par e6emp(e # PostEis # moteur de donn%es spatia(es. S(on/ # r%p(ication maPtreBesc(aves. 5t de nom+reu6 autres.

III

Installation

Avant de passer au6 proc%dures d!insta((ation proprement ditesI i( est n%cessaire de comprendre certaines notions 'ondamenta(es.

A. Vocabulaire
1. Base

=ne +ase est un ensem+(e structur% de donn%es. ;n uti(ise g%n%ra(ement une +ase de donn%e par app(ication. Pour pouvoir cr%er une +ase de donn%esI vous deveN disposer d!un c(uster de +ases de donn%es. 2. Cluster (ou gra e de base de donnes!

=n c(uster est un ensem+(e de +ases de donn%es qui partagent (es mGmes ressources ,processusI m%moireI disque...- . ". Sc#$a

=n sc.%ma est un espace de nommage au sein d!une +ase de donn%es.

B. Principes de base
1. Co$ tes s%st&$e

Les processus de PostgreSQL uti(isent un compte s/st0me. E%n%ra(ement c!est (e compte postgres qui est uti(is% pour ce(aI sau' si vous aveN insta((% PostgreSQL sur votre compte ,voir (a partie compi(ation-. 2. '(les

Les droits de (a +ase de donn%es sont g%r%s par des r2(es. Avant de pouvoir vous connecter D (a +ase de donn%esI (e r2(e que vous uti(iseN doit avoir (es autorisation n%cessaires.

Premiers pas avec PostgreSQL

)/37

.ttp#//docs.postgresq(.'r/?.@/userBmanag..tm( retenir# (es comptes s/st0mes et (es r2(es de +ase de donn%es sont distinctsL 4Gme s!i( / a des possi+i(it%s de mapping entre (es deu6 ,c'. paragrap.e sur pgA.+a.con'La con'usion entre ces & notions est une des causes 'r%quentes d!erreurs et de pro+(0mes d!insta((ation pour (es d%+utants. ". )ersions ($ineures*$a+eures!

Les versions ma3eures comprennent (e c.i''re avant (e point et un c.i''re apr0s. 56emp(e # 7.& et 7.3 sont des versions ma3eures di''%rentes. Les versions mineures incr%mentent (a 30me partie # e6emp(e # 7.3.7 Pour c.anger de version mineureI i( su''it de mettre D 3our (e moteur. 4ais pour c.anger de version ma3eureI i( est n%cessaire de d%c.arger puis rec.arger (es donn%es. P(us d!in'ormations ici # .ttp#//:::.postgresq(.org/support/versioning ,. Client*ser-eur

PostgreSQL est une app(ication c(ient/serveur. Le serveur g0re (es 'ic.iers de (a +ase de donn%esI accepte (es conne6ions des c(ientsI et e''ectue (es op%rations demand%es par (es c(ients ,requGtes...Le c(ient peut prendre de nom+reuses 'ormes. I( e6iste par e6emp(e un c(ient en (igne de commande ,psq(-I des c(ients grap.iques ,par e6emp(e pgAdmin3-... Le c(ient peut Gtre sur (a mGme mac.ine que (e serveurI ou +ien communiquer avec (ui par (e r%seau. .. Processus ser-eur

Sous 9indo:sI (e serveur PostgreSQL tourne en tant que service. Sous Linu6I ce sont des d%mons s/st0me qui e''ectuent ces tQc.es. ,si vous Gtes curieu6I vous pouveN a((er voir cet artic(e # .ttp#//da(i+o.org/g(m'11&A(esAprocessusAdeApostgresq(I( ne 'aut pas arrGter (es processus du serveur n!importe comment. Pour arrGter (e serveurI i( 'aut uti(iser (es outi(s 'ournis ,voir (a section sur (!arrGt et (e d%marrage du serveur-. JB # par d%'autI PostgreSQL est con'igur% pour %couter sur (e port $43&. Les outi(s se connectent par d%'aut sur ce port # penseN D ce(a si vous deveN modi'ier ce param0tre.

/.

0odule de contribution

"e sont des e6tensions int%ressantesI maintenues par (e pro3etI mais non int%gr%es au coeur du moteur. Premiers pas avec PostgreSQL 7/37

56emp(es # adminpacH ,'onctions supp(%mentairesI uti(is%es par (es outi(s d!administrations comme pgAdmin3pgA+u''ercac.e ,pour savoir ce qui est pr%sent dans (e cac.epgA'reespacemap # donne (a (iste des +(ocs vides et partie((ement vides des ta+(es et inde6 ,quantit% d!espace (i+re dans c.aque o+3et de (a +asepgcr/pto # 'onctions de cr/ptograp.ie

C. Exemple
Pour (!insta((ation et (a suiteI nous prendrons (!e6emp(e de (a cr%ation d!une +ase de donn%es mabaseI qui sera uti(is%e et g%r%e par un uti(isateur tom.

D.

ous !indo"s

partir de (a version 7.@I PostgreSQL 'onctionne nativement sous 9indo:s ,9indo:s RPI 9indo:s &@@@I 9indo:s &@@3I *istaI 9indo:s &@@7...-. 4a(gr% toutI seu(es (es versions D partir de (a 7.& sont support%es sous 9indo:s. I( s!insta((e en tant que service. NB # si vous regardeN dans (a (iste des processusI p(usieurs processus postgres sont pr%sents. EardeN D (!esprit que (a m%moire est partag%e entre ces processus # (a m%moire uti(is%e par PostgreSQL est donc in'%rieure D (a somme de (a m%moire uti(is%e par c.aque processus qui est a''ic.%e dans (e gestionnaire de tQc.es... 1. 12 trou-er PostgreSQL our 3indo4s5

*ous pouveN trouver deu6 t/pes d!insta((eurs pour 9indo:s # (!insta((eur Sen un c(icSI ou (!insta((eur SpgInsta((erS. Le premier est cr%% par 5nterprise8BI (e seconde par (a communaut%. *ous (es trouvereN D partir d!ici # .ttp#//:::.postgresq(.org/do:n(oad/:indo:s SpgInsta((erS n!est disponi+(e que pour (es versions 7.& et 7.3I (e document d%tai((e donc (e processus d!insta((ation pour (!insta((eur Ten un c(ic U. JB# i( est possi+(e de r%cup%rer (es +inaires sans (!insta((eur ,pour uti(isateurs avanc%s uniquement-I ou de 'aire une insta((ation si(encieuse ,voir sur (e site de 5nterprise8B2. Installation

LanceN (!insta((eur ,pour Postgresq( ?.@I (e 'ic.ier s!appe((e # postgresq(B?.@.@B1B:indo:s.e6e NB : L!insta((eur (ogue toutes ses actions dans un 'ic.ier install-postgresql.log qui est dans (e r%pertoire VK54PV de 9indo:s. 5n cas de pro+(0meI consu(ter ce 'ic.ier.

Premiers pas avec PostgreSQL

7/37

Le r%pertoire est ce(ui o< vont s!insta((er (e programme serveur ,postgres.e6e- et (es outi(s c(ient ,psq(I pgdump...-I ainsi que (a documentationI etc... L!insta((eur ne permet actue((ement pas d!insta((er (es outi(s c(ient et (e serveur s%par%ment.

Premiers pas avec PostgreSQL

?/37

L!insta((eur demande ensuite o< sera cr%% (e c(uster de donn%es. I( sera par (a suite tou3ours possi+(e de cr%%r d!autres c(uster avec (!outi( initdb.

Premiers pas avec PostgreSQL

1@/37

L!insta((eur demande (e mot de passe de (!uti(isateur postgres. AttentionI en r%a(it% ceci recouvre & notions di''%rentes # un uti(isateur du s/st0me d!e6p(oitationI ce(ui sur (e compte duque( 'onctionnent (es programmes du serveurI (e superButi(isateur de +ase de donn%es.

I(s peuvent tr0s +ien avoir des noms et des mots de passe di''%rentsI mais pour cet insta((eurI i( a %t% c.oisi de donner (e mGme nom et (e mGme mot de passe. Si (!uti(isateur postgres du s/st0me d!e6p(oitation e6iste d%3DI i( 'aut donner (e mot de passe e6istant. Si vous (!aveN ou+(i%I vous pouveN (e c.anger dans une conso(e avec (a commande net user #
net user postgres <motdepasse>

Attention D ne pas mettre un mot de passe trivia( D (!uti(isateur postgres ,c!est encore p(us important si vous autoriseN (es conne6ions D partir du r%seauL-. WviteN %ga(ement de (ui donner (e mGme mot de passe que ce(ui de (!uti(isateur s/st0me postgres. 5n e''etI (!uti(isateur postgres dispose de tous (es droits sur (e c(uster.

Premiers pas avec PostgreSQL

11/37

Par d%'autI (e port sur (eque( (e serveur attend (es conne6ions est (e port 5432. *ous pouveN c.anger (e num%ro de port d!%coute. Attention dans ce cas D con'igurer correctement vos c(ients ,C8B"I etc...1emarque # par d%'autI postgres n!acceptera pas (es conne6ions D partir du r%seau. "eci est par'ait sur un poste de d%ve(oppement autonomeI mais pas pour un serveur. "e(a pourra Gtre modi'i% par con'iguration.

Premiers pas avec PostgreSQL

1&/37

La (oca(e d%'init (e comportement du c(uster pour (es op%rations de tri ,ordre a(p.a+%tique- X Par d%'autI c!est ce((e du s/st0me qui est uti(is%eI mais vous pouveN en pr%'%rer une autre.

Premiers pas avec PostgreSQL

13/37

Si vous Gtes certain,e- du param%trageI vous pouveN c(iquer sur T SuivantU.

Premiers pas avec PostgreSQL

14/37

L!insta((ation est termin%e. Si vous sou.aiteN insta((er des modu(es comp(%mentaires ,p.ppgAdminI S(on/...-I (anceN (! outi( StacH+ui(der.

Premiers pas avec PostgreSQL

1$/37

L!insta((ation sous 9indo:s est prGte D Gtre uti(is%e. 8ans (e menu d%marrerI vous pouveN retrouver tous (es outi(s uti(es pour g%rer (e serveur. Si vous aveN conserv% (es options par d%'autI (es 'ic.iers du c(uster se trouvent dans "#YProgram >i(esYPostgreSQLY?.@I et vous trouvereN (!outi( pour d%sinsta((er dans (e mGme r%pertoire. JB # notes sur (a conso(e 9indo:s et psq( La conso(e 9indo:s est par d%'aut dans un encodage compati+(e 8;S ,par e6emp(e "P7$@-. Lorsque vous d%marrereN psq( pour (a premi0re 'oisI vous aureN (e message d!avertissement suivant #
Attention : l'encodage console (850) diffre de l'encodage Windows (1252). Les caractres 8 its peu!ent ne pas fonctionner correcte"ent.

Premiers pas avec PostgreSQL

1)/37

#oir la section $ %otes au& utilisateurs de Windows ' de la page r(f(rence de ps)l pour les d(tails.

I( est recommand% de modi'ier (!encodage de (a conso(eI Pour %viter ce(aI vous pouveN %diter (e 'ic.ier "#YProgram >i(esYPostgreSQLY?.@YscriptsYrunpsq(.+at en a3outant (a (igne #
c*cp 1252

avant (e (ancement de psq(. 1emarque importante # si vous aveN insta((% PostgreSQL sur un poste de travai( ,dans (e +ut par e6emp(e de (!%va(uer ou de vous 'ami(iariser avec (ui-I vous aveN maintenant une insta((ation qui 'onctionne T D (a sortie de (a +oPte UI et vous pouveN commencer D (!uti(iser via (!outi( pgAdmin ,cr%%er des +asesI etc...-. 4ais si vous sou.aiteN autoriser des conne6ions distantesI i( est indispensa+(e de (ire (a suite du document. I( apporte %ga(ement des in'ormations qui pourraient vous Gtre uti(es ,emp(acement et r2(e des di''%rents r%pertoires...- mGme si vous uti(iseN peu (es outi(s en (igne de commande. *ous pouveN maintenant passer D (a section T apr0s (!insta((ation U si vous (e sou.aiteN.

E.

ous Linux

PostgreSQL est 'ourni avec p(usieurs outi(s pour (a gestion du serveur et des +ases de donn%es. Les principa(es distri+utions 'ournissent des paquets PostgreSQL pour 'aci(iter (!insta((ation et (!uti(isation. 1ed.at et 8e+ian ont (eur propre version des outi(sI qui ont un nom di''%rent de ceu6 que vous trouvereN dans (a documentation. I( vaut mieu6 uti(iser (es outi(s 'ournis par votre distri+ution. 1. 6ebian*7buntu

Actue((ement ,au moment de (!%criture de ce documentI en septem+re &@1@-I (a version sta+(e de 8e+ian ,Lenn/- propose PostgreSQL 3usqu!en version 7.3I (a version testing ,SqueeNe-I 3usqu!en version 7.4I et (a version insta+(e ,Sid- propose (a version ?.@. 4ais mis D part (e num%ro de versionI ce qui suit est identique que((e que soit (a distri+ution et (a version de PostgreSQL que vous insta((ereN. Pour insta((er PostgreSQL ?.@ sur 8e+ianI i( 'aut r%cup%rer (es paquets suivants# postgresq(B?.@ ,serveurpostgresq(Bc(ientB?.@ ,c(ient-

Avec (!insta((ation de PostgreSQLI un c(uster de +ases de donn%es est cr%% automatiquement. *ous pouveN voir (a (iste des c(usters insta((%s via (a commande pg_lsclusters.

Premiers pas avec PostgreSQL

17/37

flo+flo:,- pg.lsclusters #ersion /luster Log file 0ort 1tatus 2wner 3ata director4

5.0 "ain 5672 online postgres 8!ar8li 8postgres)l85.08"ain 8!ar8log8postgres)l8postgres)l95.09 "ain.log flo+flo:,-

*ous pouveN voir que (e c(uster de +ase est insta((% dans (e r%pertoire # 8!ar8li 8postgres)l85.08"ain

La documentation des outi(s 8e+ian pour PostgreSQL se trouve dans # 8usr8s*are8doc8postgres)l9co""on Que(ques outi(s D connaPtre a+so(ument # pgA(sc(usters # (iste des c(usters pgAcreatec(uster # cr%e un c(uster de +ases pgAct(c(uster # contr2(e des c(uster ,arrGt/d%marrage-

4odu(es de contri+ution # Pour uti(iser (es modu(es de contri+utionI i( 'aut insta((er (e paquet # postgresq(Bcontri+B?.@ Lors de (!insta((ation du paquetI 8e+ian copie des 'ic.iers .sq(. *o/ons o< i(s se trouvent #
flo:,: dp;g 9L postgres)l9contri 95.0 8usr8s*are8postgres)l85.08contri 8fu<<4str"atc*.s)l 8usr8s*are8postgres)l85.08contri 8uninstall.int.aggregate.s)l 8usr8s*are8postgres)l85.08contri 8uninstall.pg.trg".s)l

Les 'ic.iers .sq( insta((ent (es modu(es de contri+ution.

2.

'ed#at*Cent 1S*8edora

Les 1P4 pour PostgreSQLI ainsi qu!un guide pratique se trouvent D (!adresse suivante # .ttp#//:::.pgrpms.org/ Premiers pas avec PostgreSQL 17/37

=ne 'ois (!insta((ation termin%eI vous devreN cr%er un c(uster #


ser!ice postgres)l initd

et d%marrer (e service #
ser!ice postgres)l start

".

Co$ ilation des sources

Si vous n!aveN pas (e droit de vous connecter en tant que root sur (e serveur Linu6 o< vous sou.aiteN insta((er PostgreSQLI c!est (e mo/en d!insta((er PostgreSQL tout de mGme. Le serveur s!e6%cutera a(ors dans votre compte uti(isateur. "ompi(er (es sources n!est pas tr0s comp(iqu% en 'aitI mGme si ce(a paraPt un peu e''ra/ant quand on ne (!a 3amais 'ait. Pour compi(er (es sourcesI vous deveN (es r%cup%rer ici # .ttp#//:::.postgresq(.org/'tp/source/ et suivre (a proc%dure d!insta((ation pr%cis%e dans (a documentation.

#.

Autres

8es +inaires sont disponi+(es %ga(ement pour # >reeBS8I 4ac ;S RI So(aris.

I)

9 r&s l:installation

8ans toute (a suite du documentI nous supposons que (!uti(isateur s/st0me sous (eque( PostgreSQL a %t% insta((% est postgres. Si ce n!est pas (e casI remp(aceN par (!uti(isateur qui d%marre (e serveur. "onsei( # avant toute modi'ication de 'ic.ier de con'igurationI penseN D sauvegarder (a version initia(e du 'ic.ierL =ne erreur est si vite arriv%e...

A. Processus et emplacement des $ic%iers.


L!emp(acement des 'ic.iers de con'iguration et des 'ic.iers du c(uster d%pend de votre distri+ution. Le r%pertoire contenant (es 'ic.iers du c(uster est couramment appe(% PE8AKA ,du nom de (a varia+(e d!environnement correspondante-. Par e6emp(e # /var/(i+/pgsq(/data ,Linu6- ou "#YProgram >i(esYPostgreSQLY?.@Ydata ,9indo:sJorma(ementI (e 'ic.ier postgresq(.con' est dans (e r%pertoire du c(uster. "ependantI ce(a peut Gtre autrement ,sur 8e+ianI tous (es 'ic.iers de con'iguration doivent Gtre dans /etc*oici un mo/en de retrouver (eur emp(acement sous Linu6 ou =ni6 si vous (!aveN ou+(i%. Liste des processus nomm%s SpostgresS # ,e6emp(e sur une 8e+ian-#
flo:,: ps 9ef = grep postgres = grep 9! grep postgres 2>5> 1 0 0?:16 @ 00:00:00 8usr8li 8postgres)l85.08 in8postgres 93 8!ar8li 8postgres)l85.08"ain 9c config.fileA8etc8postgres)l85.08"ain8postgres)l.conf

Premiers pas avec PostgreSQL

1?/37

postgres postgres postgres process

2>58 2800 2801

2>5> 2>5> 2>5>

0 0?:16 @ 0 0?:16 @ 0 0?:16 @ 0 0?:16 @ 0 0?:16 @

00:00:00 postgres: logger process 00:00:00 postgres: writer process 00:00:00 postgres: wal writer 00:00:00 postgres: auto!acuu" 00:00:00 postgres: stats collector

postgres 2802 2>5> launc*er process postgres process flo:,: 2807 2>5>

*o/eN que (e processus &7?7 est (e p0re de tous (es autres #


postgres 2>5> 1 0 0?:16 @ 00:00:00 8usr8li 8postgres)l85.08 in8postgres 93 8!ar8li 8postgres)l85.08"ain 9c config.fileA8etc8postgres)l85.08"ain8postgres)l.conf

(e c.emin derri0re (e B8 est (!emp(acement du c(uster. "e(ui derri0re (e Bc (!emp(acement du 'ic.ier de con'iguration.
config.fileA8etc8postgres)l85.08"ain8postgres)l.conf

Jorma(ementI (es autres 'ic.iers de con'iguration du c(uster ,pgA.+a.con'I pgAident.con'- sont dans (e mGme r%pertoire .
8usr8li 8postgres)l85.08 in8postgres

est (!emp(acement des +inaires. Ar+orescence du r%pertoire du c(uster#


flo:8!ar8li 8postgres)l85.08"ain: ls 9l total 68 drw&999999 11 postgres postgres 605? "ai 10 15:15 drw&999999 drw&999999 drw&r9&r9& drw&999999 drw&999999 drw&999999 drw&999999 9rw9999999 drw&999999 9rw9999999 2 postgres postgres 605? a!r 6 postgres postgres 605? a!r 2 postgres postgres 605? a!r 2 postgres postgres 605? a!r 2 postgres postgres 605? a!r 1 postgres postgres 1 postgres postgres 6 a!r 7 postgres postgres 605? a!r ase 2 postgres postgres 605? "ai 10 18:25 glo al 6 15:58 pg.clog 6 15:58 pg."ulti&act 6 15:58 pg.su trans 6 15:58 pg.t lspc 6 15:58 pg.twop*ase 6 15:58 0B.#CD1E2% 6 15:58 pg.&log 2 postgres postgres 605? "ai 10 08:15 pg.log

177 "ai 10 08:15 post"aster.opts

Premiers pas avec PostgreSQL

&@/37

9rw9999999

1 postgres postgres

56 "ai 10 08:15 post"aster.pid 71 a!r 6 15:58 root.crt 9F

lrw&rw&rw& 1 root root 8etc8postgres)l9co""on8root.crt

Que(ques sousBr%pertoires et 'ic.iers # +ase # r%pertoire des 'ic.iers de +ase de donn%es pgA(og # (og de (a +ase de donn%es ,c!est (e seu( r%pertoire du c(uster o< vous pouveN supprimer des 'ic.iersLpgAc(og et pgA6(og # commit (og ,%tat des transactions- et r%pertoire des 'ic.iers 9AL ,9rite A.ead LogI uti(is% pour (a dura+i(it% -. postmaster.pid # 'ic.ier verrou uti(is% pour %viter que p(usieurs instances ne soient actives sur (e mGme r%pertoire de donn%es.

Attention # (e contenu de pgAc(og et pgA6(og ne doit pas Gtre supprim%L

B. C%an&er le mot de passe de l'utilisateur s'st(me post&res


moins que vous n!a/eN compi(% (es sources pour uti(iser PostgreSQL sur votre compte uti(isateurI un uti(isateur postgres a %t% cr%% sur votre s/st0me. A'in de pouvoir (!uti(iserI vous deveN c.anger (e mot de passe de cet uti(isateur. Pour ce(aI sous Linu6I connecteNBvous en tant que root et e6%cuteN (a commande !passwd postgres'. ,ne pas uti(iser un mot de passe trivia(L-

C. Cr)er un cluster de base de donn)es.


Avec certaines distri+utions ,1ed.atI 8e+ian-I un c(uster est cr%% par d%'aut D (!insta((ation des paquets. 8e mGme pour (!insta((ation sous 9indo:s. Si vous Gtes dans un autre cas de 'igureI i( vous 'audra donc en cr%er un. Pour ce(aI uti(iseN (a commande initd+.

D. Autoriser les connexions


L!insta((ation de PostgreSQL positionne des va(eurs par d%'aut dans (es 'ic.iers de con'iguration. Apr0s (!insta((ationI PostgreSQL est con'igur% de te((e sorte que (es conne6ions ne sont pas possi+(es D partir du r%seau. Pour autoriser des c(ients distants D se connecterI i( 'aut con'igurer deu6 'ic.iers # postgresq(.con' et pgA.+a.con'.

Premiers pas avec PostgreSQL

&1/37

1.

Conne;ions rseau ( ostgresql.conf!

(!insta((ationI PostgreSQL est con'igur% pour n!accepter que (es conne6ions (oca(es ,c!est (e param0tre (istenAaddresses-. Si vous sou.aiteN pouvoir vous connecter D partir du r%seauI i( 'aut d%Bcommenter (e param0tre listen_addresses du 'ic.ier postgresq(.con'I et pr%ciser sur que((e,s- adresse,s- postgres accepte (es conne6ions. Attention # ce sont +ien (es adresses IP d!%couteI c!estBDBdire (es adresses IP du serveur sur (esque((es (e serveur PostgreSQL va %couter. Si vous pr%ciseN une adresse !M!I postgres va %couter (es conne6ions sur toutes (es inter'aces r%seau du serveur. Si vous pr%ciseN une adresse IPI ce(a signi'ie que postgres va %couter sur (!inter'ace r%seau de votre mac.ine qui a cette adresse IP. Si vous sou.aiteN n!autoriser (es conne6ions qu!D une (iste de mac.ines ou d!adresses IPI c!est dans pgA.+a.con' que vous pouveN (e 'aire ,paragrap.e suivant-. Pour que (es param0tres soient pris en compteI i( 'aut red%marrer (e serveur PostgreSQL. 56emp(es # ,conne6ion (oca(es:listen.addresses A 'local*ost' : w*at E0 address(es) to listen onG : co""a9separated list of addressesG : defaults to 'local*ost'H 'I' A all : (c*ange re)uires restart) port A 5672 : (c*ange re)uires restart)

,conne6ion sur (!adresse 1?&.1)7.@.4 et (oca(I port $433listen.addresses A '152.1?8.0.6H local*ost' onG : w*at E0 address(es) to listen

: co""a9separated list of addressesG : defaults to 'local*ost'H 'I' A all : (c*ange re)uires restart) port A 5672 : (c*ange re)uires restart)

2.

9ut#entification des clients ( g<#ba.conf!

Le 'ic.ier pgA.+a.con' con'igure (es autorisations pour (es +ases du c(uster. ".aque (igne pr%cise une r0g(e aidant D d%cider si (!uti(isateur est .a+i(it% D se connecter ou non. Le 'ic.ier est (u dans (!ordre par postgresI etI d0s qu!une (igne est rencontr%e qui correspond au cas Premiers pas avec PostgreSQL &&/37

test%I (a (ecture s!arrGte. "e(a signi'ie que (!ordre des (ignes est important. Sur c.aque (igne est pr%cis% (e t/pe de conne6ionI un nom de +ase de donn%esI un nom d!uti(isateurI et (a m%t.ode d!aut.enti'ication. Les m%t.odes d!aut.enti'ication (es p(us c(assiques sont # md$ ,par mot de passe cr/pt%-I ident ,D partir du nom d!uti(isateur du s/st0me d!e6p(oitationI non uti(isa+(e sous 9indo:s-. 56emp(e #
: connection par soc;et Jni& pour l'ad"inistration du ser!eur : KL0C local : KL0C local local : KL0C *ost *ost : KL0C *ost *ost 3AKAMA1C all 3AKAMA1C "a ase truc 3AKAMA1C "a ase truc 3AKAMA1C "a ase truc J1CD postgres J1CD to" all J1CD to" all J1CD to" all /E3D9A33DC11 12>.0.0.1872 12>.0.0.1872 /E3D9A33DC11 152.1?8.12.10872 152.1?8.12.10872 /E3D9A33DC11 /E3D9A33DC11 NCKO23 ident sa"euser NCKO23 "d5 ident sa"euser NCKO23 "d5 "d5 NCKO23 "d5 "d5

: connection par soc;et Jni&

: /onne&ions locales en Ep!6 :

: /onne&ion distante en Ep!6 :

La premi0re (igne #
local all postgres ident sa"euser

signi'ie queI si postgres reOoit une demande de conne6ion sur n!importe que((e +ase ,all- par socHet =ni6 ,local-I pour (!uti(isateur postgresI a(ors (a m%t.ode d!aut.enti'ication uti(is%e est # ident. sameuser signi'ie que postgres v%ri'ie que (e nom de (!uti(isateur =ni6 propri%taire de (a socHet est (e mGme que ce(ui uti(is% pour se connecter D (a +ase. La (igne suivante #
local "a ase to" "d5

signi'ie queI (orsque tom essaie de se connecter par socHet =ni6 sur (a +ase mabaseI c!est (!aut.enti'ication md$ qui est uti(is%e. La (igne #
local truc all ident sa"euser

Premiers pas avec PostgreSQL

&3/37

signi'ie que (orsque n!importe que n!importe que( uti(isateur essaie de se connecter D (a +ase truc par socHet =ni6I c!est (!aut.enti'ication ident sameuser qui est uti(is%e. La (igne #
*ost "a ase to" 12>.0.0.1872 "d5

signi'ie qu!une demande de conne6ion D partir pour (a +ase mabaseI par un uti(isateur tomI en (oca( par Ipv4 est aut.enti'i%e par md5. La (igne #
*ost "a ase to" 152.1?8.12.10872 "d5

signi'ie qu!une demande de conne6ion de (!uti(isateur tom sur mabaseI D partir de (!adresse 1?&.1)7.1&.1@ est aut.enti'i%e par md5. ;n voit donc que tom est autoris% D se connecter sur (a +ase mabaseI soit par socHet =ni6I soit par Ipv4 en (oca(I soit par Ipv4 D partir de # 1?&.1)7.1&.1@. Les autres uti(isateurs ,D part (!uti(isateur postgres- ne peuvent se connecter que sur (a +ase truc. Kom peut %ga(ement se connecter sur (a +ase trucI car tom 'ait partie de (!ensem+(e des uti(isateurs ,a((-. JB # "I81 est une 'aOon de noter (es ensem+(es d!adresses IPI avec (e c.i''re derri0re (e !/! indiquant (a tai((e du masque en +its ,ainsi un r%seau de c(asse A est en /7I c(asse BI 1)I c(asse "I &4I une IP unique /3&I et tout (e monde # @.@.@.@/@ - ,voir (!artic(e 9iHipedia # .ttp#//'r.:iHipedia.org/:iHi/AdresseAIPv4 1emarques # Le 'ic.ier con'igure (e c(usterI i( est donc commun D toutes (es +ases du c(uster # attention D ne pas autoriser un uti(isateur sur une +ase par erreur. AttentionI ne surtout pas autoriser d!aut.enti'ication trust ni ident par (e r%seauI parce que ce(a signi'ierait 'aire enti0rement con'iance au c(ient... Si vous vou(eN en savoir p(us sur (!aut.enti'ication du c(ientI a((eN voir (a documentation ici # .ttp#//docs.postgresq(.'r/?.@/c(ientBaut.entication..tm( ". Prise en co$ te des ara$&tres de configuration

Pour que PostgreSQL prenne en compte (es modi'ications de param0tres sans red%marrer (e serveurI vous aveN (es so(utions suivantes # uti(iser pgAct( re(oad ,remp(ac% par pgAct(c(uster sous 8e+ianenvo/er un signa( SIEF=P D postgres

Sous 9indo:sI i( est possi+(e d!uti(iser un raccourci dans (e menu 8%marrer ,T 1ec.argeN (a con'iguration U-. Premiers pas avec PostgreSQL &4/37

Attention # certaines options ne sont prises en compte qu!au d%marrage ,voir (a documentationI (es commentaires de postgresq(.con' ou (a co(onne conte6t de (a vue pgAsettings,. Crer une base

Jous a((ons cr%er une +ase mabase sur (e c(usterI puis 'aire de tom (e propri%taire de (a +ase ,a'in qu!i( puisse 'aire ce qu!i( veut sur cette +asepostgres+flo:8etc8postgres)l85.08"ain- pg.lsclusters #ersion /luster Log file 5.0 "ain custo" 0ort 1tatus 2wner 3ata director4

5672 online postgres 8!ar8li 8postgres)l85.08"ain

Pour ce(aI (anceN (a commande created+ #


postgres+flo- created "a ase

JB # created+ (ance en 'ait (a commande "15AK5 8AKABAS5 pour vous. .. Crer un r(le et lui donner des droits sur une base

JB # (es uti(isateurs et (es groupes sont tous g%r%s par des r2(es. 5n tant qu!uti(isateur postgresI (anceN psq( #
postgres+flo:8usr8s*are8doc8postgres)l9co""on- ps)l Mien!enue dans ps)l 5.0.?H l'interface interacti!e de 0ostgre1PL. 1aisisse<: Qcop4rig*t pour les ter"es de distri ution Q* pour l'aide9"("oire des co""andes 1PL Q@ pour l'aide9"("oire des co""andes ps)l Qg ou point9!irgule en fin d'instruction pour e&(cuter la re)uRte Q) pour )uitter postgresA:

"r%eN un r2(e tomI avec (es droits de (ogin ,pour qu!i( ait (e droit de se connecter au serveur-I et (e mot de passe # secret.
postgresA: /DCAKC D2LC to" L2BE% password 'secret'G

/DCAKC D2LC
postgresA:

Premiers pas avec PostgreSQL

&$/37

Pour que tom soit (e propri%taire de ma+ase #


postgresA: ALKCD 3AKAMA1C "a ase 2W%CD K2 to"G

ALKCD 3AKAMA1C

SorteN de psq( #
postgresA: Q)

postgres+flo:8usr8s*are8doc8postgres)l9co""on-

JB # (es commandes "15AK5 8AKABAS5 et "15AK5 1;L5 ,cr%ation de +ase et d!uti(isateursont g(o+a(es au c(uster. I( est donc possi+(e de (es e6%cuter de n!importe que((e +ase. 4aintenantI (!uti(isateur tom peut se connecter sur mabase # (anceN psq(I en pr%cisant que vous vous connecteN en tant que tom #
flo+flo:,- ps)l 9J to" "a ase Not de passe pour l'utilisateur to" : Mien!enue dans ps)l 5.0.?H l'interface interacti!e de 0ostgre1PL. 1aisisse<: Qcop4rig*t pour les ter"es de distri ution Q* pour l'aide9"("oire des co""andes 1PL Q@ pour l'aide9"("oire des co""andes ps)l Qg ou point9!irgule en fin d'instruction pour e&(cuter la re)uRte Q) pour )uitter "a aseAF

1emarque # i( 'aut pr%ciser (a +aseL Sinon psq( c.erc.era D se connecter D une +ase StomS. Si vous sou.aiteN donner (e droit D tom de cr%er des +ases#
postgresA: ALKCD D2LC to" /DCAKC3MG ALKCD D2LC postgresA:

Pour (es d%tai(s sur (es droitsI (iseN (e c.apitre correspondant de (a documentation # .ttp#//docs.postgresq('r.org/?.@/privi(eges..tm(

Premiers pas avec PostgreSQL

&)/37

E.

uper*utilisateur

Le superButi(isateur est un uti(isateur qui dispose de droits sp%ciau6 ,certaines 'onctions ne sont uti(isa+(es que par un superButi(isateur-. Les superButi(isateurs passent au travers des v%ri'ications de droits. Si vous aveN insta((% PostgreSQL en tant que rootI c(assiquement vous aveN un superButi(isateur postgres. AttentionL Le superButi(isateur disposant de tous (es droitsI %viter de (!uti(iser si ce n!est pas n%cessaireI a'in de (imiter (e risque d!erreur.

#.

+e ne peux pas me connecter , la base? -ue $aire?

Que v%ri'ier? 8!a+ord # (iseN (e message d!erreurL ,Oa peut su''ire D trouver (a so(ution D partir d!un +on moteur de rec.erc.eI des arc.ives des mai(ingB(ists ou de 'orums..."onsu(teN (a (og ,voir c.apitre suivant".erc.eN que(s sont (es c(usters pr%sents ? ,sous 8e+ian # pgA(sc(usters...*%ri'ieN (e 'ic.ier postgresq(.con' ,(e param0tre (istenAaddresses estBi( correct? Le port estBi( ce(ui sou.ait%? Le c(ient essaieBtBi( de se connecter sur (e +on port?*%ri'ieN (e 'ic.ier pgA.+a.con' *%ri'ieN (e propri%taire de (a +ase Le r2(e que vous uti(iseN aBtBi( (e droit de se (oguer ,autorisation !!L;EIJ!!- ? Le r2(e uti(is% aBtBi( (e droit de se connecter D (a +ase de donn%es ,sinon uti(iseN E1AJK ";JJ5"K on ma+ase ...-

JB # vous o+teneN (a (iste des +ases d!un c(uster avec (a commande Y( dans psq(

.. /0 se trou1e la lo& ? Comment la con$i&urer?


La con'iguration de (a (og est e''ectu%e par (e 'ic.ier postgresq(.con' ,voir (es param0tres (ogAdestination et (ogAdirector/8ans une insta((ation standard de PostgreSQLI (a (og se trouve dans un r%pertoire pgA(og sous (e r%pertoire PE8AKA ,r%pertoire du c(uster-. Par e6emp(eI sous 9indo:s # /:Q0rogra" SilesQ0ostgre1PLQ5.0QdataQpg.log 5n 'onction de votre uti(isation ,productionI testI d%ve(oppement-I vous pourreN r%g(er (es param0tres de (a (og. Par e6emp(eI (oguer tous (es ordres SQL peut Gtre 'ort uti(e en d%ve(oppement ,surtout (orsque vous uti(iseN un ;14-. Premiers pas avec PostgreSQL &7/37

PenseN D rec.arger (a con'iguration apr0s modi'ication.

2. Arr3ter4d)marrer le ser1eur Post&re -L


Sous 9indo:s # vous pouveN uti(iser SstoppeN (e serviceS et Sd%marreN (e serviceS dans (e menu d%marrerI ou +ien dans un termina(I uti(iser pgAct( #
/:Q0rogra" SilesQ0ostgre1PLQ5.0Q inFpg.ctl start 93 T/:Q0rogra" SilesQ0ostgre1PL Q5.0QdataT ser!er starting

Sous Linu6 # c!est (a commande pg_ctl ,sous 8e+ian # pg_ctlcluster ou service postresql start sous 1ed.at-

) 1utils
A. /util &rap%ique : p&Admin5
PgAdmin3 est sans doute (!outi( (e p(us popu(aire pour d%ve(opper et administrer PostgreSQL. .ttp#//:::.pgadmin.org/?(angZ'rA>1 *oici un apercu de ce D quoi i( ressem+(e. Pour (e resteI vous pourreN vous reporter D sa documentation.

Premiers pas avec PostgreSQL

&7/37

B. psql 6outil en li&ne de commande7


Psq( permet d!e6%cuter des ordres SQL sur (es +asesI et %ga(ement des commandes de gestion et d!administration. Pour (ancer psq( # 1.
a7

3indo4s :
Via le menu d)marrer 6&(re tout seul le c%an&ement d'utilisateur7

1emarque # siI D (a premi0re conne6ionI vous aveN ce message d!avertissement #

Warning: /onsole code page (67>) differs fro" Windows code page (1252) 89 it c*aracters "ig*t not wor; correctl4. 1ee ps)l reference page T%otes for Windows usersT for details.

Premiers pas avec PostgreSQL

&?/37

postgresA:

reporteNBvous D (a partie insta((ation sous 9indo:s.


b7 En li&ne de commande dans une console :

Si vous (anceN psql non pas avec (e menu d%marrerI mais D partir d!une conso(e 9indo:sI i( 'aut Gtre connect% en tant qu!uti(isateur s/st0me postgres. "eci est possi+(e avec (a commande runas de 9indo:s.
runas user:postgres c"d.e&e

Puis modi'ieN (a po(ice de (a conso(e pour uti(iser Lucida ConsoleI et c.angeN de code page #
c"d.e&e 8c c*cp 1252

,pour (a >rance4a(.eureusementI si votre +ase est en =K>7I (a conso(e 9indo:s est incapa+(e de g%rer correctement (!a''ic.age. I( 'audra %ga(ement %viter de saisir des donn%es avec psq(I et pr%'%rer pgAdmin pour cet usage ,pgAdmin g0re par'aitement (es di''%rents encodages-. 2. Sous Linu; :
ps)l "a ase

".

'e$arques :

Si vous ne pr%ciseN pas (e nom de (a +aseI psq( essaie de se connecter D (a +ase de mGme nom que (!uti(isateur. Si vous ne pr%ciseN pas (e nom d!uti(isateurI c!est (e nom de (!uti(isateur du s/st0me qui est uti(is%. ,. Co$$andes

"ommandes psq( D connaPtre a+so(ument # Y? pour (!aide des commandes psq( ,si vous devieN n!en retenir qu!une Yq quitter Y. aide des commandes sq( autres commandes int%ressantes # Y( (iste des +ases de donn%es Yc se connecter D une +ase Yd [nom\ pour (a description d!une ta+(eI d!un inde6I s%quenceI vue Yd (iste des re(ations ,ta+(esI vues et s%quences Yi nomA'ic.ier e6%cuter un 'ic.ier de commandes SQL Premiers pas avec PostgreSQL 3@/37

AttentionL Pour (a commande YiI (es noms de 'ic.iers sous 9indo:s doivent uti(iser (e s%parateur s(as. S / Set non antis(as. S Y S . 56emp(e #
Qi /:8tests.s)l

C. p%pP&Admin
"!est un outi( d!administration :e+ pour PostgreSQL .ttp#//p.ppgadmin.source'orge.net/

D. Cop'
cop/ est un outi( pour (e c.argement et d%c.argement de donn%es en masse. "e n!est pas une commande standard SQL. .ttp#//docs.postgresq('r.org/?.@/sq(Bcop/..tm(

)I
A.

6-elo
-L

e$ent

P(usieurs outi(s permettent d!e6%cuter du code SQL de 'aOon interactive # psq(I pgAdmin ,voir (es sections qui (eur sont consacr%es-. *ous pouveN %ga(ement uti(iser un outi( tiersI si vous pr%'%reN...

B. Proc)dures stoc8)es
L!int%rGt des proc%dures stocH%es est de pouvoir e6%cuter des 'onctions directement sur (e serveur. Les proc%dures stocH%es sont e''icaces et rapidesI et permettent de traiter des donn%esI soit pour consu(tation par un c(ientI soit en mise D 3our. PostgreSQL vous donne (e c.oi6 du (angage de proc%dures stocH%es. *ous pouveN uti(iser# PL/pgsq( ,proc.e de SQLI 'aci(e D uti(iserI uti(isa+(e pour (es triggersPL/Kc( PL/Per( ,pratique (orsqu!i( / a des traitements de c.aPnes de caract0res D e''ectuerPL/P/t.on 8!autres (angages ne sont pas inc(us dans (a distri+ution principa(e # PL/CavaI PL/PFPI PL/1I PL/1u+/I PL/Sc.emeI PL/s. Premiers pas avec PostgreSQL 31/37

*ous pouveN aussi en d%'inir un vousBmGme...mais c!est +eaucoup de travai( L

C. +DBC
Le pi(ote C8B" pour PostgreSQL est un pi(ote nati' ,i( est enti0rement %crit en CavaLes di''%rentes versions du pi(ote C8B" sont disponi+(es ici ,ainsi que (a documentation.ttp#//3d+c.postgresq(.org/inde6..tm( 5nsuite vous aveN 3uste D uti(iser (e .3ar de mani0re c(assique ,(e mettre dans (e "LASSPAKF de votre app(icationJB # (a s/nta6e de (!=1L
1tring urlATUd c:postgres)l:test.connTG

L!=1L a une de ces 'ormes #


jdbc:postgresql:database jdbc:postgresql://host/database jdbc:postgresql://host:port/database

A((eN voir (a documentation .ttp#//3d+c.postgresq(.org/documentation/73/connect..tm( pour p(us de d%tai(s. Que( driver prendre ? Jorma(ementI (a derni0re version du driver devrait vous convenir ,e((e est compati+(e avec toutes (es versions support%es de PostgreSQL-. 4ais i( / en a & vari%t%s # (a C8B"3I D pr%'%rer pourt (es C*4 1.4 et 1.$I et (a C8B"4I pour (a C*4 1.). P(us de pr%cisions et une matrice de compati+i(it% sur (a page de t%(%c.argement # .ttp#//3d+c.postgresq(.org/do:n(oad..tm(

D. Autres 6PE9L: P't%on: .;et: /DBC: <cl...7


*oir ici # .ttp#//docs.postgresq('r.org/?.@/e6terna(Bpro3ects..tm(

Premiers pas avec PostgreSQL

3&/37

E. A sa1oir =
1. 0a+uscules*$inuscules

Le nom des o+3ets dans (es ordres SQL est converti automatiquement en minuscu(es. Par e6emp(eI si vous e6%cuteN #
1CLC/K EdH #aleur SD2N Nata leG

(!ordre r%e((ement e6%cut% sera #


1CLC/K idH !aleur SD2N "ata leG

"a aseAF 1CLC/K EdH #aleur SD2N Nata leG id = !aleur 9999V99999999 1 = a<ert4 (1 ligne) "a aseAF

Si vous sou.aiteN uti(iser (a casse dans (es noms d!o+3ets ,ce qui n!est pas consei((% en g%n%ra(-I uti(iseN (es gui((emets. Par e6emp(e #
1CLC/K TEdTH T#aleurT SD2N TNata leTG

1emarqueN que ce comportement est di''%rent d!autres moteursI qui soit passent tous (es noms en ma3uscu(eI soit conservent (a casse. ,Le comportement standard pour un SEB8 est d!ignorer (a casseI ainsi i( est d%consei((% g%n%ra(ement d!uti(iser des noms d!o+3et avec des casses di''%rentes # si vous uti(iseN tou3ours des minuscu(esI (e comportement sera tou3ours (e mGmeI que( que soit (e SEB82. =rreurs et transactions

Avec PostgreSQLI (orsqu!une erreur se produit dans une transactionI i( n!est pas possi+(e de (!ignorer. L!erreur doit Gtre g%r%e. Sinon tous (es ordres suivants sont %ga(ement en erreur. 8e p(usI D (a 'in de (a transactionI i( n!est pas possi+(e de commiter. L!ordre ";44IK provoque en r%a(it% un 1;LLBA"]. 56emp(e #

"a aseAF

eginG

Premiers pas avec PostgreSQL

33/37

MCBE% "a aseAF insert into "ata le(!aleurH n ) !alues ('c'H2)G E%1CDK 0 1 "a aseAF insert into "ata le(!aleurH n ) !alues ('c'H2)G CDDCJD: la !aleur d'une cl( dupli)u(e ro"pt la contrainte uni)ue $ u."ata le ' "a aseAF insert into "ata le(!aleurH n ) !alues ('d'H2)G CDDCJD: la transaction est annul(eH les co""andes sont ignor(es Uus)u'W la fin du loc de la transaction "a aseAF co""itG D2LLMA/X "a aseAF select !aleurH n !aleur = n 99999999V9999 a = = (2 lignes) "a aseAF 2 2 fro" "ata leG

".

Sa-e oints

Les savepoints ne sont pas sp%ci'iques D PostgreSQL. 4ais c!est une 'onctiona(it% SQL trop peu connueI et pourtant e6trGmement uti(eI dans (e cas de traitements (ourds. =n savepoint sert D marquer un point de reprise dans un traitement. Lorsque vous aveN D e''ectuer un traitement (ong ,par e6emp(e (orqu!un programme doit mettre D 3our tout un ensem+(e de donn%es (es unes apr0s (es autres-I vous pouveN mettre des savepoints D interva((es r%gu(iers. Lorsqu!une erreur se produitI vous 'aites en sorte que (e programme e''ectue un 1;LLBA"] K; SA*5P;IJK vers un point de sauvegarde o< (!%tat de vos donn%es est co.%rent ,g%n%ra(ement (e dernier point de sauvegarde-. 5nsuite vous pouveN annu(er (e traitement ,apr0s par e6emp(e pris (a pr%caution de (oguer (es %v%nements...L!int%rGt est que seu( (es traitements e''ectu%s apr0s (e point de sauvegarde sont perdus. "e(a %vite D votre programme de 'aire un 1;LLBA"] sur (!ensem+(e du traitementL *otre programme peut ainsi e''ectuer des traitements partie((ement. ,. 66L dans les transactions>

=ne des 'onctionna(it%s (es p(us %patantes de PostgreSQL est (a possi+i(it% d!inc(ure des ordres 88L dans des transactions. 56emp(e # 8ans une transactionI on cr%e une ta+(e StestSI puis une ta+(e Smata+(eS. La cr%ation de Smata+(eS Premiers pas avec PostgreSQL 34/37

%c.oue ,(a ta+(e e6iste d%3D-. ;n 'ait un ro((+acH sur (a transaction # (a ta+(e StestS n!e6iste pas.
"a aseAF MCBE%G MCBE% "a aseAF /DCAKC KAMLC test ( id serial %2K %JLLH !aleur c*aracter !ar4ing(20) %2K %JLL)G %2KE/C: /DCAKC KAMLC cr(era des s()uences i"plicites $ test.id.se) ' pour la colonne serial $ test.id ' /DCAKC KAMLC "a aseAF ALKCD KAMLC test A33 /2%1KDAE%K p;.test 0DENADL XCL (id)G %2KE/C: ALKCD KAMLC 8 A33 0DENADL XCL cr(era un inde& i"plicite $ p;.test ' pour la ta le $ test ' ALKCD KAMLC "a aseAF /DCAKC KAMLC "ata le ( id serial %2K %JLLH !aleur c*aracter !ar4ing(20) %2K %JLL)G %2KE/C: /DCAKC KAMLC cr(era des s()uences i"plicites $ "ata le.id.se)1 ' pour la colonne serial $ "ata le.id ' CDDCJD: D2LLMA/X "a aseAF Qd Liste des relations 1c*("a = %o" = K4pe = 0ropri(taire = to" = flo 99999999V999999999999999999V9999999999V99999999999999 pu lic = "ata le pu lic = "ata le.id.se) pu lic = ta le.flo (6 lignes) = ta le = ta le = s()uence = to" la relation $ "ata le ' e&iste d(UW "a aseAF D2LLMA/XG

pu lic = ta le.flo.id.se) = s()uence = flo

"a aseAF

Int%rGt # ;n peut 'aire tout un ensem+(e de modi'ication de 'aOon atomique ,par e6emp(e (a migration d!un sc.%ma pour (!%vo(ution d!une app(ication-I "!est un sou(agement pour (e 8BA qui devra passer votre script de migrationI de nuitI de savoir qu!i( n!aura pas D restaurer (a +ase en cas d!%c.ec. .. Count(?!

5n raison de (!imp(%mentation actue((e du 4*""I count,M- 'orce (e parcours comp(et de (a ta+(eI ce qui est donc (ent. Premiers pas avec PostgreSQL 3$/37

)II

=t a r&s5

A. Lire la documentation :
Lien vers (a documentation en >ranOais # .ttp#//docs.postgresq(.'r/ 5n ang(ais # .ttp#//:::.postgresq(.org/docs/

B.

ites utiles :

.ttp#//:::.postgresq(.org/ # site o''icie( .ttp#//:::.postgresq(.'r/ # site de (a communaut% 'rancop.one.

C. Pour trou1er de l'aide compl)mentaire :


La communaut% PostgreSQL est tr0s activeI et vous trouvereN 'aci(ement de (!aide pour (es pro+(0mes (es p(us simp(es aussi +ien que pour (es cas (es p(us tordus. 1. Listes de diffusion :

La (iste 'rancop.one # .ttp#//arc.ives.postgresq(.org/pgsq(B'rBgenera(e/ Les autres # .ttp#//:::.postgresq(.org/communit//(ists/ Attention # (es (istes Sdeve(operS sont pour (es d%ve(oppeurs 85 PostgreSQL uniquement L 2. 8oru$ de la co$$unaut franco #one :

.ttp#//'orums.postgresq(.'r/

".

'e$arque : co$$ent oser -os questions5

Si vous poseN une question parce que vous aveN un pro+(0meI vous vou(eN certainement qu!i( soit r%so(u (e p(us vite possi+(e. A(ors penseN D ceu6 qui vont tenter de vous aiderI et 'aitesB(eur gagner du temps en donnant (es in'ormations n%cessaires. So/eN (e p(us c(air possi+(e. PenseN D pr%ciser au minimum # La version de PostgreSQL uti(is%eI Le s/st0me d!e6p(oitation.I ce que vous aveN 'aitI ce que vous vou(ieN 'aireI (e message d!erreur ,ou son a+sence-I (e r%su(tat o+tenu. Si vous n!arriveN pas D vous connecterI pr%ciseN si (e c(ient est sur (a mGme mac.ine que (e serveur. 1ecopieN (es messages d!erreursI consu(teN (a (og... en'in donneN (e ma6imum d!in'ormations pertinentesI et si on vous pose des questionsI r%pondeNB/ (e p(us pr%cis%ment possi+(e.

Premiers pas avec PostgreSQL

3)/37

5viteN %ga(ement de dire qu!i( / a un +ug si vous n!en Gtes pas a+so(ement certain,e-I et posteN sur (a mai(ingB(ist ou (e 'orum appropri% ,par e6emp(eI (a mai(ingB(ist pour (es novices n!est pas un endroit indigneI et des .acHers / r%pondent r%gu(i0rement et avec +ienvei((ance-

Premiers pas avec PostgreSQL

37/37