Re: surprenant résultat : rollback sur update ap rès pg_dump
Cloc <[email protected]> Thu, 29 Aug 2019 11:23:36 +0200
| Newsgroups | gmane.comp.db.postgresql.french |
|---|---|
| Message-ID | <[email protected]> |
Re. Je n'ai pas exploré cela. C'est chose faite : autocommit n'est défini nulle part. C'est donc la valeur par défaut qui s'applique : on Effectivement, après connexion via psql \echo :AUTOCOMMIT on J'ai aussi tenté : # REQUETE_PURGE="begin transaction ; update tableune set nom = '', groupes = null where id_externe = any (select distinct id from contrat where ladate < '2019-01-01'::date); commit transaction; " # echo $REQUETE_PURGE | psql -h 127.0.0.1 -U $PROPRIO_ACTUEL -w -d $MABASE Même résultat surprenant. Autre hypothèse ? Autre information : le serveur est virtualisé. Du coup, lors de la migration, nous n'avons défini que 1Go de RAM pour le système. Est-ce que cela pourrait jouer sur ce comportement ? Le 29/08/2019 à 10:43, Tumasgiu Rossini a écrit : > 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émarrez et commitez > explicitement une transaction dans votre script ? > > Le jeu. 29 août 2019 à 09:36, Cloc <[email protected] > <mailto:[email protected]>> a écrit : > > Bonjour. > > En vue d'un travail spécifique de développement, j'ai besoin de la copie > d'une base interne. J'ai voulu déplacer, 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ère. > Un fichier pgpass est créé au début du script. > > Voici le script utilisé (tronqué et avec des noms modifiés) > > # pg_dump -h $PRODUCTION -U $USER_INITIAL --clean --create $MABASE > > dump.sql > # su - $PROPRIO_ACTUEL -c 'psql ' < dump.sql > # REQUETE_PURGE="update tableune set nom = '', groupes = null where > id_externe = 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ée, au sein du script, je vérifie et affiche le > résultat d'un select. Il est cohérent (le résultat est égal à 0 si > l'update est effectué) : > # echo "select count (id) from tableune where id_externe = 25;" | psql > -h 127.0.0.1 -U bddopserv -w -d archivage > > Le script laisse tomber PostgreSQL et effectue différentes manipulations > sur des fichiers puis quitte tranquillement. Le nouveau serveur de dév > est redémarré. > > Tout semble bien s'être passé. Pourtant, dès le premier essai d'usage, > je me rend compte que les requêtes de nettoyage ne semblent pas avoir > été exécutées, comme s'il y avait eu un rollback. Une fois exécutées > manuellement, tout rentre dans l'ordre. > > Qu'ai je omis de prendre en compte ? > > Claude > >