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 &quot;off&quot; ?</div><div><br></=
div><div>Si c&#39;est le cas soit vous l&#39;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 &lt;<a href=
=3D"mailto:[email protected]">[email protected]</a>&gt; 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&#39;un travail sp=C3=A9cifique de d=C3=A9veloppement, j&#39;ai bes=
oin de la copie<br>
d&#39;une base interne. J&#39;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 &gt;<br>
dump.sql<br>
# su - $PROPRIO_ACTUEL -c &#39;psql &#39; &lt; dump.sql<br>
#=C2=A0 REQUETE_PURGE=3D&quot;update tableune set nom =3D &#39;&#39;, group=
es =3D null where<br>
id_externe =3D any (select distinct id from contrat where ladate &lt;<br>
&#39;2019-01-01&#39;::date);&quot;<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&#39;un select.=C2=A0 Il est coh=C3=A9rent (le r=C3=A9sultat=
 est =C3=A9gal =C3=A0 0 si<br>
l&#39;update est effectu=C3=A9) :<br>
# echo &quot;select count (id) from tableune where id_externe =3D 25;&quot;=
 | 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&#39;=C3=AAtre pass=C3=A9. Pourtant, d=C3=A8s le premier =
essai d&#39;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&#39;il y avait eu un rollback. U=
ne fois ex=C3=A9cut=C3=A9es<br>
manuellement, tout rentre dans l&#39;ordre.<br>
<br>
Qu&#39;ai je omis de prendre en compte ?<br>
<br>
Claude<br>
<br>
<br>
</blockquote></div>

--000000000000167de305913d82b3--