Re: surprenant résultat : rollback sur update aprè s pg_dump
Tumasgiu Rossini <[email protected]> Thu, 29 Aug 2019 10:43:53 +0200
| Newsgroups | gmane.comp.db.postgresql.french |
|---|---|
| Message-ID | <CAJD9AWxKnj3Nr2=1wvJ390cZzu8RdyFdrsOusFTYU9deV5M+rg@mail.gmail.com> |
--000000000000167de305913d82b3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Salut, est ce que par hasard la variable autocommit aurait la valeur "off" ? Si c'est le cas soit vous l'activez, soit vous d=C3=A9marrez et commitez explicitement une transaction dans votre script ? Le jeu. 29 ao=C3=BBt 2019 =C3=A0 09:36, Cloc <[email protected]> a =C3=A9c= rit : > Bonjour. > > En vue d'un travail sp=C3=A9cifique de d=C3=A9veloppement, j'ai besoin de= la copie > d'une base interne. J'ai voulu d=C3=A9placer, upgrader et adapter cette b= ase > via un script bash, sur CentOS. > > Initialement, la base est en version 9.3. Je la migre sur un serveur > CentOS 7, en version 11. Pas de configuration particuli=C3=A8re. > Un fichier pgpass est cr=C3=A9=C3=A9 au d=C3=A9but du script. > > Voici le script utilis=C3=A9 (tronqu=C3=A9 et avec des noms modifi=C3=A9s= ) > > # pg_dump -h $PRODUCTION -U $USER_INITIAL --clean --create $MABASE > > dump.sql > # su - $PROPRIO_ACTUEL -c 'psql ' < dump.sql > # REQUETE_PURGE=3D"update tableune set nom =3D '', groupes =3D null wher= e > id_externe =3D any (select distinct id from contrat where ladate < > '2019-01-01'::date);" > # echo $REQUETE_PURGE | psql -h 127.0.0.1 -U $PROPRIO_ACTUEL -w -d $MABAS= E > UPDATE 125834 > > Puis dans la foul=C3=A9e, au sein du script, je v=C3=A9rifie et affiche l= e > r=C3=A9sultat d'un select. Il est coh=C3=A9rent (le r=C3=A9sultat est = =C3=A9gal =C3=A0 0 si > l'update est effectu=C3=A9) : > # echo "select count (id) from tableune where id_externe =3D 25;" | psql > -h 127.0.0.1 -U bddopserv -w -d archivage > > Le script laisse tomber PostgreSQL et effectue diff=C3=A9rentes manipulat= ions > sur des fichiers puis quitte tranquillement. Le nouveau serveur de d=C3= =A9v > est red=C3=A9marr=C3=A9. > > Tout semble bien s'=C3=AAtre pass=C3=A9. Pourtant, d=C3=A8s le premier es= sai d'usage, > je me rend compte que les requ=C3=AAtes de nettoyage ne semblent pas avoi= r > =C3=A9t=C3=A9 ex=C3=A9cut=C3=A9es, comme s'il y avait eu un rollback. Une= fois ex=C3=A9cut=C3=A9es > manuellement, tout rentre dans l'ordre. > > Qu'ai je omis de prendre en compte ? > > Claude > > > --000000000000167de305913d82b3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div>Salut,</div><div><br></div><div>est ce que par hasard= la variable autocommit aurait la valeur "off" ?</div><div><br></= div><div>Si c'est le cas soit vous l'activez, soit vous d=C3=A9marr= ez et=20 commitez <br></div><div>explicitement une transaction dans votre script ?<b= r></div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmai= l_attr">Le=C2=A0jeu. 29 ao=C3=BBt 2019 =C3=A0=C2=A009:36, Cloc <<a href= =3D"mailto:[email protected]">[email protected]</a>> a =C3=A9crit=C2= =A0:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px= 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Bonjour.<br= > <br> En vue d'un travail sp=C3=A9cifique de d=C3=A9veloppement, j'ai bes= oin de la copie<br> d'une base interne. J'ai voulu d=C3=A9placer, upgrader et adapter c= ette base<br> via un script bash, sur CentOS.<br> <br> Initialement, la base est en version 9.3. Je la migre sur un serveur<br> CentOS 7, en version 11. Pas de configuration particuli=C3=A8re.<br> Un fichier pgpass est cr=C3=A9=C3=A9 au d=C3=A9but du script.<br> <br> Voici le script utilis=C3=A9 (tronqu=C3=A9 et avec des noms modifi=C3=A9s)<= br> <br> # pg_dump -h $PRODUCTION -U $USER_INITIAL --clean --create $MABASE ><br> dump.sql<br> # su - $PROPRIO_ACTUEL -c 'psql ' < dump.sql<br> #=C2=A0 REQUETE_PURGE=3D"update tableune set nom =3D '', group= es =3D null where<br> id_externe =3D any (select distinct id from contrat where ladate <<br> '2019-01-01'::date);"<br> # echo $REQUETE_PURGE | psql -h 127.0.0.1 -U $PROPRIO_ACTUEL -w -d $MABASE<= br> UPDATE 125834<br> <br> Puis dans la foul=C3=A9e, au sein du script, je v=C3=A9rifie et affiche le<= br> r=C3=A9sultat d'un select.=C2=A0 Il est coh=C3=A9rent (le r=C3=A9sultat= est =C3=A9gal =C3=A0 0 si<br> l'update est effectu=C3=A9) :<br> # echo "select count (id) from tableune where id_externe =3D 25;"= | psql<br> -h 127.0.0.1 -U bddopserv -w -d archivage<br> <br> Le script laisse tomber PostgreSQL et effectue diff=C3=A9rentes manipulatio= ns<br> sur des fichiers puis quitte tranquillement. Le nouveau serveur de d=C3=A9v= <br> est red=C3=A9marr=C3=A9.<br> <br> Tout semble bien s'=C3=AAtre pass=C3=A9. Pourtant, d=C3=A8s le premier = essai d'usage,<br> je me rend compte que les requ=C3=AAtes de nettoyage ne semblent pas avoir<= br> =C3=A9t=C3=A9 ex=C3=A9cut=C3=A9es, comme s'il y avait eu un rollback. U= ne fois ex=C3=A9cut=C3=A9es<br> manuellement, tout rentre dans l'ordre.<br> <br> Qu'ai je omis de prendre en compte ?<br> <br> Claude<br> <br> <br> </blockquote></div> --000000000000167de305913d82b3--