Re: surprenant résultat : rollback sur update aprè s pg_dump

Tumasgiu Rossini <[email protected]> Fri, 13 Sep 2019 09:51:51 +0200
Newsgroups gmane.comp.db.postgresql.french
Message-ID <CAJD9AWwfWq8ZaeO4+BHXmF2E14P89-vMugg=46Md3eVeJNYA_w@mail.gmail.com>
--000000000000a91f4a05926a87bc
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Le jeu. 12 sept. 2019 =C3=A0 17:13, Nicky Larson <[email protected]> =
a
=C3=A9crit :

> La commande suivante me parait bizarre car le nom de la base n'y est pas
> specifi=C3=A9e:
>
>
su - $PROPRIO_ACTUEL -c 'psql ' < dump.sql
>
>
Le dump est cr=C3=A9=C3=A9 avec l'option --create, il contient donc les com=
mandes de
cr=C3=A9ation de la base, utiliser psql sans sp=C3=A9cifier la base
est valide, cf. https://www.postgresql.org/docs/current/app-pgdump.html



> On Mon, Sep 2, 2019 at 9:52 AM St=C3=A9phane Dunand <[email protected]> w=
rote:
>
>> Le 29/08/2019 =C3=A0 09:36, Cloc a =C3=A9crit :
>> > 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 cett=
e base
>> > 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 w=
here
>> > 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
>> $MABASE
>> > UPDATE 125834
>> >
>> > Puis dans la foul=C3=A9e, au sein du script, je v=C3=A9rifie et affich=
e le
>> > 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;" | ps=
ql
>> > -h 127.0.0.1 -U bddopserv -w -d archivage
>>
>> peut-=C3=AAtre ici :
>> -d $MABASE
>>
>> > Le script laisse tomber PostgreSQL et effectue diff=C3=A9rentes manipu=
lations
>> > 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=
 essai d'usage,
>> > je me rend compte que les requ=C3=AAtes de nettoyage ne semblent pas a=
voir
>> > =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
>> St=C3=A9phane D.
>>
>>
>>

--000000000000a91f4a05926a87bc
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-size:large"><br></div></div><br><div class=3D"gmail_quote"><div dir=3D"lt=
r" class=3D"gmail_attr">Le=C2=A0jeu. 12 sept. 2019 =C3=A0=C2=A017:13, Nicky=
 Larson &lt;<a href=3D"mailto:[email protected]">said.assemlal@gmail.=
com</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);pa=
dding-left:1ex"><div dir=3D"ltr"><div> La commande suivante me parait bizar=
re car le nom de la base n&#39;y est pas specifi=C3=A9e: <br></div><div>=C2=
=A0</div></div></blockquote><blockquote class=3D"gmail_quote" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1e=
x"><div dir=3D"ltr"><div></div><div>su - $PROPRIO_ACTUEL -c &#39;psql &#39;=
 &lt; dump.sql</div></div><br></blockquote><div><br></div><div><div style=
=3D"font-size:large" class=3D"gmail_default">Le dump est cr=C3=A9=C3=A9 ave=
c l&#39;option --create, il contient donc les commandes de cr=C3=A9ation de=
 la base, utiliser psql sans sp=C3=A9cifier la base</div><div style=3D"font=
-size:large" class=3D"gmail_default">est valide, cf. <a href=3D"https://www=
.postgresql.org/docs/current/app-pgdump.html">https://www.postgresql.org/do=
cs/current/app-pgdump.html</a></div><br></div><div>=C2=A0</div><blockquote =
class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px sol=
id rgb(204,204,204);padding-left:1ex"><div class=3D"gmail_quote"><div dir=
=3D"ltr" class=3D"gmail_attr">On Mon, Sep 2, 2019 at 9:52 AM St=C3=A9phane =
Dunand &lt;<a href=3D"mailto:[email protected]" target=3D"_blank">s.dunand@=
sirap.fr</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D=
"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-le=
ft:1ex">Le 29/08/2019 =C3=A0 09:36, Cloc a =C3=A9crit=C2=A0:<br>
&gt; Bonjour.<br>
&gt;<br>
&gt; En vue d&#39;un travail sp=C3=A9cifique de d=C3=A9veloppement, j&#39;a=
i besoin de la copie<br>
&gt; d&#39;une base interne. J&#39;ai voulu d=C3=A9placer, upgrader et adap=
ter cette base<br>
&gt; via un script bash, sur CentOS.<br>
&gt;<br>
&gt; Initialement, la base est en version 9.3. Je la migre sur un serveur<b=
r>
&gt; CentOS 7, en version 11. Pas de configuration particuli=C3=A8re.<br>
&gt; Un fichier pgpass est cr=C3=A9=C3=A9 au d=C3=A9but du script.<br>
&gt;<br>
&gt; Voici le script utilis=C3=A9 (tronqu=C3=A9 et avec des noms modifi=C3=
=A9s)<br>
&gt;<br>
&gt; # pg_dump -h $PRODUCTION -U $USER_INITIAL --clean --create $MABASE &gt=
;<br>
&gt; dump.sql<br>
&gt; # su - $PROPRIO_ACTUEL -c &#39;psql &#39; &lt; dump.sql<br>
&gt; #=C2=A0 REQUETE_PURGE=3D&quot;update tableune set nom =3D &#39;&#39;, =
groupes =3D null where<br>
&gt; id_externe =3D any (select distinct id from contrat where ladate &lt;<=
br>
&gt; &#39;2019-01-01&#39;::date);&quot;<br>
&gt; # echo $REQUETE_PURGE | psql -h 127.0.0.1 -U $PROPRIO_ACTUEL -w -d $MA=
BASE<br>
&gt; UPDATE 125834<br>
&gt;<br>
&gt; Puis dans la foul=C3=A9e, au sein du script, je v=C3=A9rifie et affich=
e le<br>
&gt; r=C3=A9sultat d&#39;un select.=C2=A0 Il est coh=C3=A9rent (le r=C3=A9s=
ultat est =C3=A9gal =C3=A0 0 si<br>
&gt; l&#39;update est effectu=C3=A9) :<br>
&gt; # echo &quot;select count (id) from tableune where id_externe =3D 25;&=
quot; | psql<br>
&gt; -h 127.0.0.1 -U bddopserv -w -d archivage<br>
<br>
peut-=C3=AAtre ici :<br>
-d $MABASE<br>
<br>
&gt; Le script laisse tomber PostgreSQL et effectue diff=C3=A9rentes manipu=
lations<br>
&gt; sur des fichiers puis quitte tranquillement. Le nouveau serveur de d=
=C3=A9v<br>
&gt; est red=C3=A9marr=C3=A9.<br>
&gt;<br>
&gt; Tout semble bien s&#39;=C3=AAtre pass=C3=A9. Pourtant, d=C3=A8s le pre=
mier essai d&#39;usage,<br>
&gt; je me rend compte que les requ=C3=AAtes de nettoyage ne semblent pas a=
voir<br>
&gt; =C3=A9t=C3=A9 ex=C3=A9cut=C3=A9es, comme s&#39;il y avait eu un rollba=
ck. Une fois ex=C3=A9cut=C3=A9es<br>
&gt; manuellement, tout rentre dans l&#39;ordre.<br>
&gt;<br>
&gt; Qu&#39;ai je omis de prendre en compte ?<br>
&gt;<br>
&gt; Claude<br>
St=C3=A9phane D.<br>
<br>
<br>
</blockquote></div>
</blockquote></div></div>

--000000000000a91f4a05926a87bc--