Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous.
VOilà je suis en train d'effectuer un programme de transfert de données en C++ et il me faudrait faire un DROP sur ma base. Problème il semblerait que lors de mes test j'ai mis des verrous sur la base (probablement des transactions implicitement crées mais pas libérées sur plantage de mon exe ).
Toujurs est-il que si je fais un ps -fu j'obtiens :
postgres@testserver:/etc/init.d$ ps -fu postgres
UID PID PPID C STIME TTY TIME CMD
postgres 4145 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(58826) idle in transaction
postgres 4149 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(58839) idle in transaction
postgres 4172 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(58874) idle in transaction
postgres 4178 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(44733) idle in transaction
postgres 4201 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(44776) idle in transaction
postgres 4207 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(44783) idle in transaction
postgres 4502 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(44812) idle in transaction
postgres 4844 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(44824) idle in transaction
postgres 4846 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(44828) idle in transaction
postgres 5584 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(53866) idle in transaction
postgres 12899 1 0 2009 ? 00:09:37 /usr/lib/postgresql/8.3/bin/postgres -D /var/lib/postgresql/8.3/mai
postgres 12901 12899 0 2009 ? 00:00:58 postgres: writer process
postgres 12902 12899 0 2009 ? 00:00:35 postgres: wal writer process
postgres 12903 12899 0 2009 ? 00:05:30 postgres: autovacuum launcher process
postgres 12904 12899 0 2009 ? 00:04:59 postgres: stats collector process
postgres 19494 12899 0 14:16 ? 00:00:00 postgres: pgsql postgres 192.168.1.90(3438) idle
postgres 20289 18682 0 14:22 pts/0 00:00:00 su postgres
postgres 20290 20289 0 14:22 pts/0 00:00:00 bash
postgres 21024 12899 0 14:25 ? 00:00:00 postgres: pgsql socaf 192.168.1.90(3450) idle
postgres 22646 12899 0 14:39 ? 00:00:00 postgres: pgsql socaf 192.168.1.90(3584) idle
postgres 24151 20290 0 14:48 pts/0 00:00:00 ps -fu postgres
postgres 25576 12899 0 Jan12 ? 00:00:03 postgres: postgres socaf 192.168.1.114(36412) idle in transaction
postgres 28355 12899 0 Jan12 ? 00:00:00 postgres: postgres socaf 192.168.1.114(39589) idle in transaction
Quelqu'un pourrait-il me guider pour libérer toutes les connections à la base.
Merci d'avance
Hors ligne
Bon j'ai trouvé une solution à la radical g fait un kill sur tous les PID associés à idle in transaction.
Merci quand même de me répondre si quelqu'un à une solution plus élégante.
Hors ligne
Ne JAMAIS faire un kill sur les processus, sauf cas extrême.
Il faut trouver les processus qui ont ouvert ces connexions et les arrêter. Dans le cas où ce n'est pas possible, un arrêt/redémarrage de PostgreSQL peut se révéler nécessaire. À savoir qu'en 8.4, il est aussi possible d'utiliser la commande pg_terminate_backend.
Guillaume.
Hors ligne
Merci pour la réponse et désolé de la mienne pour sa nature tardive.
Oui je me doutais bien que ce n'était pas une bonne idée de faire un Kill mais je devais faire au plus vite pour avancer.
Sinon pour la 8.4 je n'ai pas encore fait la bascule pour l'instant donc je garde la commande que vous m'avez donnée de côté pour la prochaine fois.
Merci en tout cas et encore désolé de ne répondre que maintenant.
Hors ligne
Au passage, en 8.3 il y a au moins pg_cancel_backend, qui déclenche un rollback et libère la transaction d'une session, ce qui aurait suffi normalement à résoudre votre problème
Marc.
Hors ligne
Merci bcp pour l'info sur la 8.3 Marc Cousin je vais de ce pas tester parce que je suis justement encore dans le même cas que samedi.
Merci
Hors ligne
Pages : 1