Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 Re : Général » fonction update n'est pas mise à jour dans une boucle » 02/07/2019 08:02:03
Oui, je veux que lorsqu'on fait une modification dans la boucle , cette modification sera tout de suite aperçu lors des prochaines itérations dans la boucle.
Pour plus d'explication, une autre façon d'approche c'est que :
on a une valeur initiale par exemple : x = 2 , avant d'entrer dans la boucle. Puis on entre en boucle FOR : x vaut 2 toujours , disons maintenant que durant les traitements effectués dans la boucle FOR, on fait un update de x , x est maintenant égale à 3 normalement (c'est ce qu'on veut); mais, on constate que durant le parcours de boucle x est toujours = 2 mais pas à 3. Les modifications ne sont elles pas prise en compte instantanément dans une boucle ? Ou faudrait il attendre que le boucle soit fini pour prendre en compte les modifications ? Comment on peut contourner cela ?
#27 Général » fonction update n'est pas mise à jour dans une boucle » 01/07/2019 17:47:49
- duple
- Réponses : 14
Bonjour,
Je travaille sous PG9.6 environnement linux.
J'ai une fonction qui effectue des modifications de table avec un parcours de boucle.
En gros: je crée une table temporaire contenant des données pour simplifier disons :
La table T1 contient idt1, dateDeb_t1, dateFin_t1 (la table est remplie de données)
Par ailleurs, j'ai aussi une autre table physique non temporaire T2, avec T2 = idt2, dateDeb_t2 et dateFin_T2
Le principe est le suivant :
Je parcours les données de T1 comme suit: à chaque itération (ligne d'enregistrement) trouvée dans T1 je vérifie si il existe une certaine correspondance avec des lignes de T2 : s'il y a correspondance alors je modife dateDeb_T2 par dateFin_T1 pour la ligne (itération) en question idt1.
Pour simplifier on a comme suit :
FOR x,y,z IN SELECT idt1, dateDeb_t1, dateFin_t1 FROM T1
LOOP -- Je parcours une à une les lignes de T1
FOR a,b,c IN SELECT idt2, dateDeb_t2, dateFin_T2 FROM T2 WHERE dateDeb_t2 >= y AND dateDeb_t2 < z-- ici je verifie s'il existe la "correspondance"
LOOP
-- Pour chaque ligne T2 comprise dans la ligne en cours T1 : modifier dateDeb_T2 par dateFin_T1
-- C'est ici le cas intéressant : le pourquoi du comment ???
UPDATE T2 SET dateDeb_T2 = z
WHERE idt1 = a;
END LOOP;
END LOOP;
Le souci est que en exécutant cette fonction, elle tourne mais en vérifiant, les données ne sont pas à jour durant la boucle. C'est à dire je modifie dans le cas "pourquoi du comment" dateDeb_t2 mais pourtant au fur et à mesure du passage d'itération dans les boucles les nouvelles dateDeb_t2 ne sont pas à jour mais reste toujours la valeur initiale.
Sauriez vous pourquoi et comment corriger le fait que les valeurs initiales ne sont pas modifiées au fur et à mesure de la boucle.
Je précise que le type de dateDeb et dateFin joué ici est du timestamp without time zone, est qu'il y a lien la -dessus ?
Merci de votre attention et espérant qu'il y aura des réponses ![]()
#28 Re : Général » current_timestamp dans boucle non prise en compte » 03/04/2019 14:28:59
C'est vrai merci , çà à resolu le problème
#29 Général » current_timestamp dans boucle non prise en compte » 03/04/2019 12:27:29
- duple
- Réponses : 2
Bonjour,
J'utilise pg 9.6.
J'ai le petit script ci-dessous:
Do $$
DECLARE
v_time timestamp;
v_time_end timestamp;
BEGIN
SELECT current_timestamp INTO v_time;
v_time_end := v_time + interval '5 seconds';
LOOP
SELECT current_timestamp INTO v_time;
RAISE NOTICE 'v_time : % ---- v_time_end : %',v_time, v_time_end;
EXIT WHEN v_time> v_time_end;
END LOOP;
END;
$$ LANGUAGE plpgsql;
Quelqu'un peut me dire pourquoi ce script rentre dans une boucle infinie et la condition EXIT WHEN v_time> v_time_end; n'est pas prise en compte.
Plus précisement la valeur v_time n'est pas raffraichier et SELECT current_timestamp INTO v_time à l'interieur du boucle n'est pas prise en compte ?
Merci de votre attention
#30 Re : Général » upgrate postgres de 9.5 vers 10 » 18/03/2019 16:14:14
Vous pouvez toujours tester sur une base de test avant.
Sinon le plus simple à mon avis est de faire direct un dump sur 9.5 et restore sur 10
#31 Re : Général » Récupération. Espace disque » 18/03/2019 16:11:38
Bonjour,
Est ce vraiment les file system dans base (tablespace) qui ont augmentés ? Peut être que c'est autre chose (les wal peut être)
Essayez de refaire l'opération mais cette fois ci avec pg_repack => c'est similaire à du vacuum full + reindex mais sans pose de verrou.
#32 Re : Général » upsert postgres insert on conflict » 07/03/2019 15:13:32
Merci pour la reponse , ah oui on peut faire un returning sur l'update !!
Merci
#33 Général » upsert postgres insert on conflict » 06/03/2019 11:19:03
- duple
- Réponses : 2
Bonjour,
j'ai une requête du genre :
Si machin1 n'existe pas
INSERT INTO machin1
INSERT INTO machin 2 VALUES (curval_sequence_de_machin1)
sinon (machin1 existe)
UPDATE machin1
INSERT INTO macin2 VALUES (id_machin1,...)
Fin Si
Maintenant j'aimerai remplacer ces instructions par un simple UPSERT
Genre:
INSERT INTO machin1
ON CONFLICT ON CONSTRAINT la_contrainte_unicite DO
UPDATE machin1
Mais du coup comment faire là pour intégrer également INSERT INTO machin2 ?
#34 Re : Général » error : could not stat file "pg_xlog/XXXXXXXXX" no such file » 31/01/2019 20:11:25
En effet le repertoire pg_xlog a commencé à se remplir hier mais je ne sais pas si çà en est la cause ou pas. Pour y remedier on a mit archive_commande = /bin/true pour libérer l'espace. Un dump regulier est lancé toutes les nuits.
Sauriez vous donc quelle pourrait être la cause de la disparition de ce wall ?
#35 Re : Général » error : could not stat file "pg_xlog/XXXXXXXXX" no such file » 31/01/2019 11:47:42
la vrai question et donc pourquoi et comment le wall ne serait plus présent alors que dans archive_status il y aurait un wall.ready ??
#36 Re : Général » error : could not stat file "pg_xlog/XXXXXXXXX" no such file » 31/01/2019 11:42:31
Merci pour vos réponses,
pitpoule , ruizsebastien > réfléchis comme tel je pense que vous aviez peut être raison, mais je ne vois pas comment expliquer qu'un wall.ready est présent SANS le wall dans pgxlog, alors que c'est de part le wall qu'il detecte qu'il fait un .ready et par la suite un .done lorsque le wall sera copié ???
#37 Re : Général » error : could not stat file "pg_xlog/XXXXXXXXX" no such file » 30/01/2019 16:38:43
bah oui vu que le mode archivage est activé des wall.ready sont présent
#38 Général » pg_repack » 29/01/2019 16:54:58
- duple
- Réponses : 2
Bonjour,
Quelqu'un ici connait la commande pg_repack, j'aimerai avoir votre avis la dessus, avantage et inconvenient si c'est pas trop demandé.
https://pgxn.org/dist/pg_repack/doc/pg_ … stallation
Sinon si on fait un vacuum full avec cette commande est ce qu'il fait un reindex automatique après ?
Et est ce que donc de par cette commande on peut genre par exemple repatrier les index et tables existantes dans differentes tablespaces ?
Merci
#39 Re : Général » error : could not stat file "pg_xlog/XXXXXXXXX" no such file » 29/01/2019 16:51:35
Le processus du pid n'est plus trouvable. Et non pas de message PANIC.
En fait il existe un archive_command qui fait un rsync des wall mais je ne voit pas trop pourquoi si c'est du à cà ?
#40 Re : Général » error : could not stat file "pg_xlog/XXXXXXXXX" no such file » 29/01/2019 09:10:24
Salut,
Autour de celui-là existe pas de messages particulier, seulement les requêtes qu'il execute.
Sinon un exemple de message complet avec statement est :
2019-01-28 15:28:21 EAT [P:32755][S:5c4eefa9.7ff3][T:0][A:[unknown]] (postgres@[local]): [4-1] ERROR: could not stat file "pg_xlog/00000001000010D40000007E": No such file or directory
2019-01-28 15:28:21 EAT [P:32755][S:5c4eefa9.7ff3][T:0][A:[unknown]] (postgres@[local]): [5-1] STATEMENT:
2019-01-28 15:28:21 EAT [P:18381][S:5c4cba22.47cd][T:0][A:] (@): [1110-1] LOG: checkpoint complete: wrote 189547 buffers (2.6%); 0 transaction log file(s) added, 44 removed, 55 recycled; write=209.352 s, sync=0.094 s, total=209.701 s; sync files=502, longest=0.007 s, average=0.000 s; distance=1245287 kB, estimate=1245287 kB
Ce qui est bizarre c'est si tu dis qu'il en a besoin alors pourquoi les wall n'y sont plus. Et est ce que çà n'a pas influence avec la cohérence des transactions ?
#41 Général » error : could not stat file "pg_xlog/XXXXXXXXX" no such file » 27/01/2019 00:59:41
- duple
- Réponses : 15
Bonjour,
Nous utilisons PostgreSQL version 9.6 sur un OS linux centOS.
En regardant les log je vois des messages d'erreur : ERROR: could not stat file "pg_xlog/0000000100000AF800000094": No such file or directory
La base est en marche toujours, jusqu'ici il n'y a pas de problème mais ce message dans les logs me laisse penser, quels peuvent bien en être la cause de cet erreur ?
Auriez vous une réponse à cette question ?
Merci de votre attention
#42 Re : Général » faire une boucle dans psql » 20/11/2018 15:59:46
Oui existe bien les boucles et cruseurs avec postgresql. Il faudrait que tu crées une fonction selon ton besoin je pense:https://docs.postgresql.fr/8.3/plpgsql-control-structures.html
https://docs.postgresql.fr/8.4/plpgsql-cursors.html
#43 Re : Général » pg_clog : impossible lecture : Input/output error » 12/10/2018 15:59:00
Merci , en fin de compte on a restauré la table sans les lignes corrompues.
Merci à tous
#44 Re : Général » pg_clog : impossible lecture : Input/output error » 11/10/2018 12:49:46
Ca ne le fait pas il existe egalement d'autre id corrompu.
Je reprend : donc la seule solution est elle remplacer 00f4 évoquait plus haut ? Comment cré t-on ce fichier de remplacement ?
#45 Re : Général » pg_clog : impossible lecture : Input/output error » 11/10/2018 12:30:01
ah une autre idée faire un select en specifiant carrément la clé, donc de prendre le max(id) et select where id in (id_corrompu+1, id_corrompu+2, .. max(id)) je teste
#46 Re : Général » pg_clog : impossible lecture : Input/output error » 11/10/2018 12:23:00
Je ne peux même pas faire un select * from table_corrompu where id <> id_corrompu ni un select * from table_corrompu where id > id_corrompu.
Il doit faire un fullscan le truc et çà pête.
donc la seule solution est elle remplacer 00f4 évoquait plus haut ? Comment cré t-on ce fichier de remplacement ?
#47 Re : Général » pg_clog : impossible lecture : Input/output error » 11/10/2018 10:39:50
gleu > Merci pour ta réponse Guillaume.
En parcourant une à une les enregistrement de la table en question, on connait maintenant la ligne (1 champs dans cette ligne) qui pose problème.
Si je fais un DELETE de cette ligne et que je lance ensuite un VACUUM FULL sur la table, est ce que cela pourrait résoudre le problème ?
#48 Re : Général » pg_clog : impossible lecture : Input/output error » 11/10/2018 09:05:22
Petite rectification : postgresql 9.4.5 mais non 9.3.5
Personne une solution ?
#49 Général » pg_clog : impossible lecture : Input/output error » 10/10/2018 18:08:23
- duple
- Réponses : 9
Bonjour,
Je rencontre l'erreur suivant lors d'un dump sur une base de données particulière sur une table contenant des données binaire (ex: image, pdf,...) de type bytea.
Voici l'erreur en question:
pg_dump: Error message from server: ERROR: could not access status of transaction 256212738
DETAIL: Could not read from file "pg_clog/00F4" at offset 81920: Input/output error.
En regardant dans PGDATA/pg_clog le fichier 00F4 existe bien mais ne peut être lu.
Ex: un less pg_clog/00F4 renvoie l'erreur : read error
Environnement sous linux, version postgresql 9.3.5.
Sachant qu'il n'y a pas de sauvegarde dump à restaurer, est ce qu'il existe un moyen pour corriger le problème svp ?
#50 Re : Général » pg_statio_all_indexes vs pg_stat_all_indexes » 12/07/2018 10:51:29
Ok, merci beaucoup pour ces explications interessantes ![]()