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

Nicky Larson <[email protected]> Thu, 12 Sep 2019 11:12:53 -0400
Newsgroups gmane.comp.db.postgresql.french
Message-ID <CAHtsRK+HB6WHorEWf3F0OLF8475AOKKNfUcaNDKD3w8QNkbJbg@mail.gmail.com>
--00000000000081298f05925c94c3
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

 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

On Mon, Sep 2, 2019 at 9:52 AM St=C3=A9phane Dunand <[email protected]> wro=
te:

> 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 cette=
 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 wh=
ere
> > 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 affiche=
 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;" | psq=
l
> > -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 manipul=
ations
> > 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 av=
oir
> > =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
> > manuellement, tout rentre dans l'ordre.
> >
> > Qu'ai je omis de prendre en compte ?
> >
> > Claude
> St=C3=A9phane D.
>
>
>

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

<div dir=3D"ltr"><div> La commande suivante me parait bizarre car le nom de=
 la base n&#39;y est pas specifi=C3=A9e: <br></div><div><br></div><div>su -=
 $PROPRIO_ACTUEL -c &#39;psql &#39; &lt; dump.sql</div></div><br><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]">s.=
[email protected]</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pad=
ding-left: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>

--00000000000081298f05925c94c3--