Postgresql 9 0
Postgresql 9 0
version 9.0
1/37
Table of Contents
I Introduction.......................................................................................................................................4 [Link] ce document?...............................................................................................................4 B. qui s!adresse ce document?......................................................................................................4 ".Licence du document #................................................................................................................$ II Pr%sentation de PostgreSQL............................................................................................................$ [Link]....................................................................................................................................$ &."aract%ristiques et 'onctionna(it%s #........................................................................................$ III Insta((ation......................................................................................................................................) A.*oca+u(aire..................................................................................................................................) [Link].........................................................................................................................................) &."(uster ,ou grappe de +ase de donn%es-..................................................................................) [Link].%ma....................................................................................................................................) [Link] 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 [Link] 9indo:s.............................................................................................................................7 1.;< trouver PostgreSQL pour 9indo:s?.................................................................................7 &.Insta((ation...............................................................................................................................7 [Link] Linu6.................................................................................................................................17 1.8e+ian/=+untu......................................................................................................................17 &.[Link]/"ent ;S/>edora........................................................................................................1? 3."ompi(ation des sources.......................................................................................................&@ >.Autres.........................................................................................................................................&@ I* Apr0s (!insta((ation........................................................................................................................&@ [Link] et emp(acement des '[Link].....................................................................................&@ B.".anger (e mot de passe de (!uti(isateur s/st0me postgres........................................................&& "."r%er un c(uster de +ase de donn%es.........................................................................................&& [Link] (es conne6ions...........................................................................................................&& 1."onne6ions r%seau ,postgresq(.con'-....................................................................................&& &.[Link]'ication des c(ients ,pgA.+[Link]'-...........................................................................&3 [Link] 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...............................................................&$ [Link](isateur........................................................................................................................&7 >.Ce ne peu6 pas me connecter D (a +ase? Que 'aire?....................................................................&7 E.;< se trouve (a (og ? "omment (a con'igurer?.........................................................................&7 [Link]/d%marrer (e serveur PostgreSQL..................................................................................&7 * ;uti(s..............................................................................................................................................&7 A.;uti( [Link] # pgAdmin3.....................................................................................................&7 [Link]( ,outi( en (igne de commande-............................................................................................&? Premiers pas avec PostgreSQL &/37
1.9indo:s #.............................................................................................................................&? &.Sous Linu6 # .........................................................................................................................3@ 3.1emarques # ..........................................................................................................................3@ 4."ommandes ..........................................................................................................................3@ ".[Link].............................................................................................................................3@ 8."op/..........................................................................................................................................31 *I 8%ve(oppement.............................................................................................................................31 [Link]...........................................................................................................................................31 [Link]%dures stocH%es..................................................................................................................31 ".C8B".........................................................................................................................................31 [Link] ,P51LI P/[Link] .JetI ;8B"I Kc(...-.............................................................................3& 5.A savoir L...................................................................................................................................3& 1.4a3uscu(es/minuscu(es.........................................................................................................3& &.5rreurs et transactions...........................................................................................................33 [Link].............................................................................................................................34 4.88L dans (es transactionsL...................................................................................................34 $."ount,M-................................................................................................................................3$ *II 5t apr0s?......................................................................................................................................3$ [Link] (a documentation #.............................................................................................................3$ [Link] uti(es #...............................................................................................................................3$ ".Pour trouver de (!aide comp(%mentaire #...................................................................................3$ [Link] de di''usion #...............................................................................................................3$ &.>orum de (a communaut% '[Link] #...............................................................................3) 3.1emarque # comment poser vos questions?.........................................................................3)
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 [Link] 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.
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 [Link] '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.:[Link]/: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'[Link] (a m%moire # .ttp#//[Link]('[Link]/?.@/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 ,[Link] 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
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.
)/37
.ttp#//[Link](.'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.+[Link]'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 [Link] de version mineureI i( su''it de mettre D 3our (e moteur. 4ais pour [Link] de version ma3eureI i( est n%cessaire de d%[Link] puis [Link] (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 '[Link] 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 [Link] ,par e6emp(e pgAdmin3-... Le c(ient peut Gtre sur (a mGme [Link] 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 [Link]. ,si vous Gtes curieu6I vous pouveN a((er voir cet artic(e # .ttp#//da(i+[Link]/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 [Link]'reespacemap # donne (a (iste des +(ocs vides et partie((ement vides des ta+(es et inde6 ,quantit% d!espace (i+re dans [Link] o+3et de (a +asepgcr/pto # 'onctions de cr/[Link]
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 [Link] processus qui est a''ic.%e dans (e gestionnaire de [Link]... 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 '[Link] s!appe((e # postgresq(B?.@.@B1B:indo:s.e6e NB : L!insta((eur (ogue toutes ses actions dans un '[Link] [Link] qui est dans (e r%pertoire VK54PV de 9indo:s. 5n cas de pro+(0meI consu(ter ce '[Link].
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.
?/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.
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% [Link] 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 [Link] 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.
11/37
Par d%'autI (e port sur (eque( (e serveur attend (es conne6ions est (e port 5432. *ous pouveN [Link] (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.
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.
13/37
14/37
L!insta((ation est termin%e. Si vous [Link] insta((er des modu(es comp(%mentaires ,[Link] S(on/...-I (anceN (! outi( StacH+ui(der.
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 '[Link] 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.
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 '[Link] "#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 [Link] 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 [Link].
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. [Link] 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.
17/37
flo+flo:,- [Link] #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 "[Link] 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 '[Link] .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 [Link].s)l 8usr8s*are8postgres)l85.08contri [Link]".s)l
2.
'ed#at*Cent 1S*8edora
Les 1P4 pour PostgreSQLI ainsi qu!un guide pratique se trouvent D (!adresse suivante # .ttp#//:::.[Link]/ Premiers pas avec PostgreSQL 17/37
et d%marrer (e service #
ser!ice postgres)l start
".
Si vous n!aveN pas (e droit de vous connecter en tant que root sur (e serveur Linu6 o< vous [Link] 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
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 '[Link] de con'igurationI penseN D sauvegarder (a version initia(e du '[Link] =ne erreur est si vite arriv%e...
1?/37
[Link] postgres: logger process [Link] postgres: writer process [Link] postgres: wal writer [Link] postgres: auto!acuu" [Link] postgres: stats collector
postgres 2802 2>5> launc*er process postgres process flo:,: 2807 2>5>
(e [Link] derri0re (e B8 est (!emp(acement du c(uster. "e(ui derri0re (e Bc (!emp(acement du '[Link] de con'iguration.
config.fileA8etc8postgres)l85.08"ain8postgres)[Link]
Jorma(ementI (es autres '[Link] de con'iguration du c(uster ,pgA.+[Link]'I [Link]'- sont dans (e mGme r%pertoire .
8usr8li 8postgres)l85.08 in8postgres
&@/37
9rw9999999
1 postgres postgres
Que(ques sousBr%pertoires et '[Link] # +ase # r%pertoire des '[Link] 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 '[Link](og et pgA6(og # commit (og ,%tat des transactions- et r%pertoire des '[Link] 9AL ,9rite [Link] LogI uti(is% pour (a dura+i(it% -. [Link] # '[Link] verrou uti(is% pour %viter que p(usieurs instances ne soient actives sur (e mGme r%pertoire de donn%es.
&1/37
1.
(!insta((ationI PostgreSQL est con'igur% pour n!accepter que (es conne6ions (oca(es ,c!est (e param0tre (istenAaddresses-. Si vous [Link] pouvoir vous connecter D partir du r%seauI i( 'aut d%Bcommenter (e param0tre listen_addresses du '[Link] 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 [Link] qui a cette adresse IP. Si vous [Link] n!autoriser (es conne6ions qu!D une (iste de [Link] ou d!adresses IPI c!est dans pgA.+[Link]' 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:[Link] 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)[email protected] et (oca(I port $[Link] 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.
Le '[Link] pgA.+[Link]' 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 '[Link] 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 [Link] (igne est pr%cis% (e t/pe de conne6ionI un nom de +ase de donn%esI un nom d!uti(isateurI et (a m%[Link] d![Link]'ication. Les m%[Link] d![Link]'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
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%[Link] d![Link]'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 (![Link]'ication md$ qui est uti(is%e. La (igne #
local truc all ident sa"euser
&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 (![Link]'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 [Link]'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 [Link]'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.:[Link]/:iHi/AdresseAIPv4 1emarques # Le '[Link] 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![Link]'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 (![Link]'ication du c(ientI a((eN voir (a documentation ici # .ttp#//[Link](.'r/?.@/c([Link]..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 [Link] (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- [Link] #ersion /luster Log file 5.0 "ain custo" 0ort 1tatus 2wner 3ata director4
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:
&$/37
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( [Link] D se connecter D une +ase StomS. Si vous [Link] 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 [Link] correspondant de (a documentation # .ttp#//[Link]('[Link]/?.@/privi(eges..tm(
&)/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.
#.
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 [Link] des [Link] des mai(ingB(ists ou de 'orums..."onsu(teN (a (og ,voir [Link] suivant".[Link] que(s sont (es c(usters pr%sents ? ,sous 8e+ian # pgA(sc(usters...*%ri'ieN (e '[Link] postgresq(.con' ,(e param0tre (istenAaddresses estBi( correct? Le port estBi( ce(ui [Link]%? Le c(ient essaieBtBi( de se connecter sur (e +on port?*%ri'ieN (e '[Link] pgA.+[Link]' *%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(
Sous Linu6 # c!est (a commande pg_ctl ,sous 8e+ian # pg_ctlcluster ou service postresql start sous [Link]-
) 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#//:::.[Link]/?(angZ'rA>1 *oici un apercu de ce D quoi i( ressem+(e. Pour (e resteI vous pourreN vous reporter D sa documentation.
&7/37
3indo4s :
Via le menu d)marrer 6&(re tout seul le c%an&ement d'utilisateur7
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.
&?/37
postgresA:
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 [Link] 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''[Link]. 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'[Link] e6%cuter un '[Link] de commandes SQL Premiers pas avec PostgreSQL 3@/37
AttentionL Pour (a commande YiI (es noms de '[Link] 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#//[Link]'[Link]/
D. Cop'
cop/ est un outi( pour (e [Link] et d%[Link] de donn%es en masse. "e n!est pas une commande standard SQL. .ttp#//[Link]('[Link]/?.@/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 [Link] de caract0res D e''ectuerPL/P/[Link] 8!autres (angages ne sont pas inc(us dans (a distri+ution principa(e # PL/CavaI PL/PFPI PL/1I PL/1u+/I PL/[Link] PL/s. Premiers pas avec PostgreSQL 31/37
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 [Link]#//3d+[Link](.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:[Link]
A((eN voir (a documentation .ttp#//3d+[Link](.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%(%[Link] # .ttp#//3d+[Link](.org/do:n(oad..tm(
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
"a aseAF 1CLC/K EdH #aleur SD2N Nata leG id = !aleur 9999V99999999 1 = a<ert4 (1 ligne) "a aseAF
Si vous [Link] 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
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
%[Link] ,(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 $ [Link]) ' pour la colonne serial $ [Link] ' /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 [Link])1 ' pour la colonne serial $ "ata [Link] ' 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 [Link]) pu lic = ta [Link] (6 lignes) = ta le = ta le = s()uence = to" la relation $ "ata le ' e&iste d(UW "a aseAF D2LLMA/XG
"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!%[Link]. .. 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#//[Link](.'r/ 5n ang(ais # .ttp#//:::.postgresq(.org/docs/
B.
ites utiles :
La (iste '[Link] # .ttp#//[Link](.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#//'[Link](.'r/
".
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 [Link] 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.
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-
37/37