Vous n'êtes pas identifié(e).

#1 Re : Général » wait_event = lock manager wait_event_type = LWlock » 05/07/2020 01:01:15

Merci pour les conseils.
Pour les CPU, d'après les constats, le load average n'est pas si haut que çà (inférieur au nombre de CPU) surtout lorsque ce phénomène se produit, le load dimunue même.

#2 Re : Général » Problème connexion serveur base de données » 03/07/2020 18:15:46

Bonjour,
Quel environnement ?

- Vérifier si le service PG est démarré
- Vérifier si l'hôte est pingable
- Vérifier que listen_address est bien paramétré dans le fichier postgresql.conf, (mettre listen_address='*' par exemple)
- Vérifier le fichier pg_hba.conf quand même, voir si il faut paramètrer l'accès à l'hôte
- Vérifier si le port est ouvert et non bloqué par un parfeu par exemple

En général, cela tourne autour de ces critères.

Bon courage

#3 Re : Général » Triggers via 2 tables sur 2 bases différentes » 03/07/2020 14:14:25

Bonjour,
Je ne sais pas si votre sujet est toujours d'actualité mais à mon avis, vous pourriez avoir cela avec dblink : https://docs.postgresql.fr/10/contrib-d … ction.html

#4 Général » wait_event = lock manager wait_event_type = LWlock » 03/07/2020 14:08:22

duple
Réponses : 2

Bonjour,
Nous sommes sur un environnement linux centOS avec pg12 d'y installer. Aujourd'hui j'ai remarqué en faisant un htop que plusieurs des requêtes postgres tombent dans un status BIND, vous savez lorsque vous faites un htop pour voir les requêtes en cours et normalement à la fin il y a des "SELECT" ou "idle", cela dépend, et là je dirais que 90% des requêtes sont BIND. Déjà que veut dire ce statut BIND ? C'est pas toujours qu'on voit çà mais c'est plutôt qu'on c'est lent au niveau exécution des requêtes, je soubconne des contentions de locks car en faisant pg_stat_activity on voit que la plupart des requêtes, elles sont en wait_event = lock manager et wait_event_type = LWlock, et une accumulation de requête se fait sentir également suite à cela, après un certain temps çà part bien sur, mais la question est que veut dire exactement wait_event = lock manager et wait_event_type = LWlock ? Quelle en est la cause ? Et comment ou quoi faire si la situation se reproduit et/ou pour que la situation de ce genre ne se reproduise plus ?
Auriez vous une, des idées sur le sujet svp ?

Merci d'avance

#6 Re : Optimisation » paramètrage work_mem » 09/09/2019 14:26:25

Ok, donc la config à adopter serait de faire work_mem ~ (RAM - Shared_buffers - maintenance_ work_mem) / max_connections ?
Et si on configure work_mem a une valeur trop élevée çà va entrainer quoi, une erreur "out of memory" ?

#7 Optimisation » paramètrage work_mem » 04/09/2019 14:42:08

duple
Réponses : 4

Bonjour,
J'aimerai savoir comment affiner le paramètrage de work_mem sur postgresql.
Exemple si on prend un evironnement linux , avec pg9.6 et ram = 10G, disons avec une configuration de shared_buffers = 3G (environ 25% de la RAM) et max_connection = 50,
est ce que cela veut il dire que sur les 10G de la RAM 3 G sera allouée spécialement pour les caches pg et donc on aurait 7G restant pour work_mem, maintenance_work_mem et les caches pour fsync ? Supposons que le nombre maximum de jointure dans une requête est de 4 + possibilité de trie sur les requêtes, et qu'à un instant T on aurait en moyenne 30 requêtes en parallèle, et en plus on va paramétrer maintenance_work_mem = 1G; est ce que de par ce fait la valeur max à attribuer à work_mem serait donc dans cette situation de : work_mem = 50 MB sachant que 50MB * 4 (jointure) * 30 (connexions en mm temps)  = 6000MB = 5.86GB retirés dans la RAM ?

#9 Optimisation » partionnement table avec PG 9.6 » 20/08/2019 16:13:14

duple
Réponses : 3

Bonjour,
Avec un environnement linux PG 9.6, j'imagine que le partitionnement de la table se fait avec le principe d'héritage ?
Considérons alors que j'ai une table volumineuse qui n'est pas encore partitionnée car l'architecture de départ n'a pas prévue cela. Maintenant, vu que la taille de la table dépasse celle de la RAM, j'aimerai tester un partitionnement, ma question est donc: lorsque je vai créer les tables de partitions , existe t il un moyen de transférer les données depuis la table mère vers les nouvelles partitions créées ou devrai je faire çà de façon manuelle ?

Merci pour votre attention

#10 Re : Général » Format Export fichier XML » 01/08/2019 14:13:10

oles67 a écrit :
duple a écrit :

Salut,
Si çà peut aider, existe un logiciel "Navicat" qui permet de se connecter sur plusieurs SGBD, tel que Oracle, PG, Mysql, ... et on peut exécuter des requêtes dedans, on peut également exporter les données sous plusieurs format : le xml y compris. Tu peux même paramétrer çà pour que çà se lance en tache planifiée, super le soft non smile

Merci mais j'ai une préférence pour le GNU.


Ton PG est hébergé dans un environnement Linux, mais tu peux bien aussi avoir un poste client windows dont navicat installé. Sinon, il me semble que Navicat fonctionne sous les environnements Mac, Windows et Linux.

#11 Re : Général » ERROR: query returned no rows » 01/08/2019 14:07:58

Ah je me suis trompé, en revérifiant il avait bien des INSERT INTO RETURNING INTO STRICT dans mon code. J'ai renforcé les conditions (verification de données ) pour entrer dans cette partie de "INSERT INTO" et c'est bon.

Les pistes de rjuju  et gleu : clause INTO STRICT et le numéro de ligne où l'eurreur est rencontré m'ont aidé.

Merci à tous.

#12 Re : Général » ERROR: query returned no rows » 01/08/2019 09:38:06

rjuju a écrit :
duple a écrit :

Sinon, est ce que quelqu'un connait quelles sont les actions qui peuvent engendrer l'erreur ERROR: query returned no rows ?


À priori une clause INTO STRICT dans une commande plpgsql.


>>> A j'ai que INTO dans mes requêtes mais pas STRICT

#13 Re : Général » ERROR: query returned no rows » 01/08/2019 09:36:12

rjuju a écrit :
duple a écrit :

Ok, le bout de code suspect dans la fonction :


Suspect ou coupable ?  Le message d'erreur devrait donner des informations sur la partie exacte du code retournant l'erreur.

Bah en fait, c'est aussi un souci, car tu vois le message d'erreur il n'indique pas la requête qui pose problème. Le message dit juste : ERROR: queyr returned no rows SQL state: P0002 Context: PL/pgSQL function fusion_temp.algo_fusion(bigint,bigint,bigint,text,text,bigint,bigint,bigint,boolean,boolean,integer)

#14 Re : Général » ERROR: query returned no rows » 31/07/2019 14:49:43

Sinon, est ce que quelqu'un connait quelles sont les actions qui peuvent engendrer l'erreur ERROR: query returned no rows ?

#15 Re : Général » Restauration WAL » 31/07/2019 12:02:04

Et sinon, si on lance PG en mode mono utilisateur avec un certain niveau de debug çà dit quoi, le message est peut être un peu plus clair ou c'est le même que dans le log ?
postgres --single -D /path_pgdata/data -d 3 la_base

#16 Re : Général » Restauration WAL » 31/07/2019 10:50:49

Par curiosité le fichier WAL fait combien de mega ? Est ce qu'il est compressé ?

#17 Re : Général » ERROR: query returned no rows » 31/07/2019 10:36:57

Ok, le bout de code suspect dans la fonction :
IF ((p_debut_i <= p_debut_j) AND (p_fin_i >= p_fin_j))THEN
            RAISE NOTICE 'debut FUS 3 idtli % deb i % fini % idtlj % debj % finj %',p_id_temp_i,p_debut_i,p_fin_i,p_id_temp_j,p_debut_j,p_fin_j;
                v_date1 := p_debut_j::date;
                v_date2 := p_debut_j::date +1;
               
                RAISE NOTICE 'SELECT id_temp INTO v_id_temp FROM t_temp WHERE pers = % AND proj = % AND id_op = % AND deb > % AND deb < % AND id_temp <> % AND duree > 0 LIMIT 1',p_pers_j,p_pers_j,p_op_j,v_date1,v_date2,p_id_temp_j;
                --C'EST ICI LE CODE SUSPECT QUI PETE
                SELECT id_temp INTO v_id_temp FROM t_temp WHERE pers = p_pers_j AND proj = p_proj_j AND id_op = p_op_j AND deb > v_date1 AND deb < v_date2 AND id_temp <> p_id_temp_j AND duree > 0 LIMIT 1;
                -- Pour certaine données l'execution de la fonction s'arrete ici et renvoie l'erreur ERROR :  query returned no rows                
                raise notice 'v_id_temp %',v_id_temp;
                IF (v_id_temp is not null) THEN
                    p_qte_j := COALESCE(p_qte_j,0);
                    EXECUTE 'UPDATE '||v_tfusion_temp_i||' SET qte = qte + '||p_qte_j||' WHERE id_temp = '||v_id_temp;
                    EXECUTE 'UPDATE t_temp SET qte = coalesce(qte,0) + '||p_qte_j||', com=''fusion temp: rajout qte du temp '||p_id_temp_j||' algo fus'' WHERE id_temp = '||v_id_temp;
                    PERFORM fusion_temp.update_quantity3(p_proj_j, p_op_j, p_id_temp_j, v_id_temp);
                   
                END IF;
               
                EXECUTE 'DELETE FROM '||v_tfusion_temp_j||' WHERE id_temp = '||p_id_temp_j;
                PERFORM fusion_temp.update_quantity_unicite(p_proj_j, p_op_j, p_id_temp_j, null::integer, null::integer, 'delete'::text);
                PERFORM fusion_temp.delete_temp(p_id_temp_j,p_id_temp_i,'algo fus');
                INSERT INTO fusion_temp.algo_debug(idtli,debi,fini,id_sysi,idtlj,debj,finj,id_sysj,login,algo_trouve,date_recherche) VALUES (p_id_temp_i,p_debut_i,p_fin_i,p_id_sys_i,p_id_temp_j,p_debut_j,p_fin_j,p_id_sys_j,p_pers_i,'algo fus',p_debut_i::date);
                RAISE NOTICE 'fin FUS 3 idtli % deb i % fini % idtlj % debj % finj %',p_id_temp_i,p_debut_i,p_fin_i,p_id_temp_j,p_debut_j,p_fin_j;
                RETURN 3;

#18 Re : Général » Format Export fichier XML » 31/07/2019 10:14:35

Salut,
Si çà peut aider, existe un logiciel "Navicat" qui permet de se connecter sur plusieurs SGBD, tel que Oracle, PG, Mysql, ... et on peut exécuter des requêtes dedans, on peut également exporter les données sous plusieurs format : le xml y compris. Tu peux même paramétrer çà pour que çà se lance en tache planifiée, super le soft non smile

#19 Général » ERROR: query returned no rows » 31/07/2019 09:20:12

duple
Réponses : 10

Bonjour,
Je travaille sur PG9.6 environnement linux et je rencontre l'erreur suivante lors de l'execution d'une fonction -> "ERROR: query returned no rows" .
Vraiment je ne comprend pas l'intérêt de ce message d'erreur, pourquoi la requête ne renvoie t elle seulement pas une ligne vide avec valeur null si pas d'enregistrement, d'ailleurs c'est ce qui est le fonctionnement normale il me semble.
J'ai une requête je la teste avec un truc simple genre:

do $$
declare
x bigint;
begin

SELECT col_x INTO x
FROM table
WHERE col_a <> val_1
AND col_b = 'val_2'
AND col_c = val_3
AND col_d = val_4
AND col_e > 'val_51'::date
AND col_e < 'val_51'::date
AND col_f > 0
LIMIT 1;


raise notice 'x %',x;

end;
$$ language plpgsql;

La pas de problème la requête ne retourne rien , on a pas d'erreur , on a comme résultat :
NOTICE:  x <NULL>

Maintenant, je prend cette requête je la place dans une autre fonction bien plus complexe qui traite plusieurs lignes d'enregistrement.
Puis je tombe sur cette erreur que je ne comprend pas ERROR: query returned no rows
Pourquoi cette erreur ? Et comment la résoudre ? Il semble que la fonction pète lors de l’exécution de cette même requête (sachant que défois çà passe défois çà pète).

Please help !
Quelqu'un une idée la dessus ?
Merci

#20 Re : Général » fonction update n'est pas mise à jour dans une boucle » 04/07/2019 10:04:15

Merci à vous pour ces explications.
Çà serait plutôt quand même sympa si on pouvait lors d'élaboration de fonctions plpgsql d'activer ou de désactiver ce comportement INSENSITIVE de la boucle FOR.

#21 Re : Général » fonction update n'est pas mise à jour dans une boucle » 03/07/2019 14:32:23

rjuju> Si je comprend INSENSITIVE explique le fait que la mise à jour dans la boucle n'est pas perceptible durant la boucle (dans les prochaines itérations) ?
Et WHERE CURRENT OF cursor_name met à jour la ligne sur laquelle le curseur pointe, mais cette modification ne sera pas évaluer à la prochaine itération puisque le curseur est INSENSITIVE  ?
C'est çà ?

#22 Re : Général » fonction update n'est pas mise à jour dans une boucle » 03/07/2019 11:42:13

Salut à tous,
Merci pour ces réponses.
dverite > C'est vrai qu'un simple UPDATE pourrait sans doute faire les mises à jour nécessaires dans cet exemple mais en réalité il existe d'autres traitement à faire qui nécessite de passer par une boucle FOR. Ici l'exemple ne le montre pas car c'est plus simplifié pour décrire le besoin.
rjuju > Interessant, pourrais tu plus expliquer et décrire le sujet stp (WHERE CURRENT OF et curseur insensitive)?

#23 Re : Général » fonction update n'est pas mise à jour dans une boucle » 02/07/2019 16:32:32

Oui c'est çà, la modification n'est pas ré évaluer dans la suite des itérations.
Voilà pourquoi jai du passer par un traçage pour faire connaitre au boucle les changements de valeurs.
Mais est ce que ce principe de traitement de boucle for avec un select est valable pour tout sgbd ?

#24 Re : Général » fonction update n'est pas mise à jour dans une boucle » 02/07/2019 15:40:20

En guise d'information:
Pour contourner le problème j'ai du à chaque update fait dans la 2ème boucle > tracer la ligne modifiée par son id puis la valeur modifiée. Et au passage de boucle, vérifier si la ligne traitée dans la boucle figure dans le traçage, si oui mettre à jour l'élément modifiée par sa bonne valeur. Re vérifier si le test dans 2 ème boucle coincide toujours avec les nouvelles valeurs. Du coup les éléments sont à jour au fur et à mesure des itérations.

#25 Re : Général » fonction update n'est pas mise à jour dans une boucle » 02/07/2019 09:12:27

Pour ajouter je veux que les modifications faites dans la 2ème boucle, soient perceptible au niveau de la 1ère boucle :
itération i=1 de la première boucle , on fait une modification dans la 2ème boucle, donc dans la 2ième itération (et plus) de la première boucle le update fait (dans 2ème boucle) lors de la première itération (1ère boucle) soit pris en compte (valeur mise à jour dans les itérations qui suivent)

Normalement çà devrait être çà non ?

Pied de page des forums

Propulsé par FluxBB