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

#1 Re : PL/pgSQL » fonction minimum sur les dates » 04/02/2010 18:45:19

Merci,

j'avais abouti à cela comme conclusion

#2 PL/pgSQL » fonction minimum sur les dates » 04/02/2010 13:30:08

flotho
Réponses : 2

Bonjour,

Je manipule des variables dates pour lesquelles je souhaiterai trouver le minimum entre deux dates.
Je ne parle pas des fonctions d'agrégats mais bien d'une fonction PLpgSQL.
Quelqu'un en connaît il une ou dois je faire un test IF pour traiter cela?

Merci d'avance de vos réponses

#3 Re : PL/pgSQL » RECORD et PLPGSQL » 03/02/2010 13:10:27

Je suis en 8.4.

Dès que j'airais le temps, je me repencherai sur le WHERE CURRENT OF

Merci pour tout

#4 Re : PL/pgSQL » RECORD et PLPGSQL » 03/02/2010 11:36:40

Marc Cousin a écrit :

Le record n'est qu'une recopie de l'enregistrement, ce n'est pas l'enregistrement lui même. Pour le modifier vous devez faire un update.

Définitivement je vais l'imprimer en grand sur mon mur!!
A chaque fois que je développe des triggers de plus de 10 lignes, je retrouve des réflexes de développeur et oublie les bases de la BDD.

Marc Cousin a écrit :

Si votre trigger est un trigger BEFORE, vous avez accès aux records implicites OLD et NEW, qui contiennent l'enregistrement avant modification par le trigger, et après modification par le trigger.

Complètement acquis

Marc Cousin a écrit :

Je ne comprends pas pourquoi dans le code d'un trigger vous auriez une boucle FOR sur toute une table.
Votre trigger est bien sur la table XXX ?

Tout à fait. En fait je ne rebalaye pas toute la table mais seulement les lignes qui ont un certain critère commun avec celui qui est inséré. C'est pour faire de la ventilation analytique comme vous vous en doutez!

Marc Cousin a écrit :

PS: ça serait certainement plus simple pour vous à expliquer et pour nous à comprendre si on travaillait sur du vrai code… plutot que d'appeler les tables XXX, les tests mytest, etc…

Promis la prochaine fois je mets le tout!

Merci en core de vos conseils avisés.

#5 Re : PL/pgSQL » RECORD et PLPGSQL » 03/02/2010 02:18:55

J'ai fait un test supplémentaire :

FOR ventilation_local IN (SELECT * FROM XXX) LOOP 
     IF (mytest) THEN  
          RAISE NOTICE 'ventilation %',  ventilation_local;
          ventilation_local.myfield:=10;   
          RAISE NOTICE 'ventilation %',  ventilation_local;
      END IF;
END LOOP;

Les deux RAISE me renvoie des résultats adpatés, j'entends par là que la serie de valeur avant est différente de celle d'après.

Mais dès que je sors de la boucle, l'enregistrement n'est pas validé!!

#6 Re : PL/pgSQL » RECORD et PLPGSQL » 03/02/2010 01:58:48

Re bonjour,

J'ai toujours le même problème mais cette fois ci sur une base 8.4.
Voici la tête de mon trigger :

FOR ventilation_local IN (SELECT * FROM XXX) LOOP
    IF (mytest) THEN
        ventilation_local.myfield := mynewvalue;
    END IF;
END LOOP;

d'après la doc : http://docs.postgresql.fr/8.4/plpgsql-statements.html
l'affectation de valeur sur un record devrait être opérationnelle.

Pourtant, le champ myfield ne prend pas la valeur mynewvalue qui est non nulle et de même type. J'ai même essayé de mettre une valeur fixe.

Merci d'avance de votre aide

#7 Re : Installation » [Résolu] Installation module tablefunc » 31/01/2010 12:21:10

Solution trouvée,

Il suffisait de suivre ce lien : http://www.postgresonline.com/journal/i … ntrib.html

et/ou

tout simplement de passer le script tablefunc présent dans le répertoire contrib.

J'ai eu du mal à trouver ce répertoire car je suis passé par le oneclickinstaller de l'enterprisedb.

Bien à vous

#8 Installation » [Résolu] Installation module tablefunc » 31/01/2010 11:49:19

flotho
Réponses : 1

Bonjour à toutes et à tous,

Je tourne sur Linux et  pg8.4. Je cherche à installer le module tablefunc pour utiliser les fonctions de table pivot.
Je ne trouve pas comment l'installer et la doc est assez succincte sur le sujet.

Quelqu'un aurait il une idée?

#9 Re : Général » Tâches automatiques » 15/11/2009 13:28:50

Pour plein de raisons :

1 - J'ai pas le temps de me lancer dans le script batch
2 - J'aime bien travailler avec des outils intégrés qui permettent une administration globale de tout ce qui concerne la base de données.

En fait je n'en ai pas d'autres mais on s'en passera pour l'instant.

#10 Re : Général » Tâches automatiques » 15/11/2009 02:45:00

Vraiment galère,

Je blqoue avec wxwidget wui n'est pas reconnu avec la commande FOND_PACKAGE.
J'ai même fait une compil' de wxwidget et rien n'y fait.

Bon, il ne me reste plus que mes yeux pour pleurer

#11 Re : Général » Tâches automatiques » 15/11/2009 00:27:24

Bon

j'ai cassé mon éléphant.
J'ai tout supprimé et installer la 8.4 avec pgadmin3 1.10.
Du coup pgagent ne vient pas avec d'office.
Je l'ai donc téléchargé la version 3.0.0  sur le site mais quand je lance pgagent j'ai le message suivant :

 error while loading shared libraries: libssl.so.0: cannot open shared object file: No such file or directory

Il ne me reste plus qu'à me lancer dans la compilation

snif

#12 Re : Général » Tâches automatiques » 14/11/2009 19:41:33

Je vais retester la chose,

J'ai tout supprimé et je suis en train de retélécharger la dernière version de postgresql

#13 Re : Général » Tâches automatiques » 14/11/2009 19:13:12

Ok,

J'ai changé le mot de passe du serveur postgres et je l'ai mis comme mon root.
J'ai réussi à avoir une exécution bloquée à 17h48.
Mais depuis impossible de regénérer une exécution.

J'ai deux versions différentes de pgadmin3, la 1.8 et la 1.10 en provenance de enterpriseDB.
J'ai essayé avec les deux mais rien n'y fait

Est ce qu'il pourrait y avoir un conflit entre les versions de pgadmin.

Est ce que je ne devrais pas tout désinstaller et ne conserver qu'une seul installation?

#14 Re : Général » Tâches automatiques » 14/11/2009 18:18:48

Marc,

Lorsque je fais fichier>ouvrir pgpass depuis pgadmin, j'ai bien des mots de passe enregistrés. D'ailleurs, lors de la connexion aux serveurs, il ne m'interroge plus car j'ai défini les mots de passe par défaut.

Concernant les droits, j'ai bien -rw pour l'utilisateur courant mais comme c'était précisé dans la doc, j'ai déclaré pgagent en root. Est ce que je dois passer en root / utilisateur courant / utilisateur postgres partout.

Encore merci de votre aide

#15 Re : Général » Tâches automatiques » 14/11/2009 16:56:01

Marc,

En effet seulement dans postgres.

J'ai quelques soucis toutefois. J'ai créé un job sans schedule avec une étape toute simple qui me fait un nextvalue sur une sequence histoire de voir les résultats. Malheureusement, j'ai beau tenter d'exécuter, aucun historique ni rien. J'ai donc rajouté un schedule toutes les minutes de chaque heure mais rien non plus.

Je me suis donc dis que je n'avais correctement lancé le pgagent.
voici la commande que j'ai passée en root : pgagent hostaddr=127.0.0.1:5432 dbname=postgres user=postgres
lorsque je fais un ps -ax, mon pgagent est bien là.

Sauriez vous ce qu'il me manquerait dans ma config

En vous remerçiant d'avance de votre aide

#16 Re : Général » Tâches automatiques » 14/11/2009 16:12:04

Bonjour et un grand merci pour ces réponses rapides.

@Damine : pour la maintenance, je connaissais l'autovacuum qui est de toute façon défini automatiquement par défaut dans les config serveur si je ne me trompe pas

@Marc : FORMIDABLE, je me disais bien que cela ne pouvait qu'exister mais comme je n'avais pas compris qu'il fallait 'l'installer' en plus de pgadmin, j'étais tout béta.

Autre question, le script de création des tables pgagent doit il être créé uniquement sur la base postgres du SGBD ou doit il être passé sur toutes les bases sur lesquelles je dois intervenir.

Dans tous les cas un grand merci à tous les deux.

#17 Général » Tâches automatiques » 14/11/2009 12:41:54

flotho
Réponses : 15

Bonjour,

Après quelques recherches infructueuses, je souhaiterai savoir s'il existe un module intégré au serveur postgresql pour lancer des tâches répétitives ou bien s'il faut écrire un script et le lier à une tâche CRON.
Je tourne sur pg8.3.

Merci de vos réponses éclairées.

#18 Re : PL/pgSQL » RECORD et PLPGSQL » 10/10/2009 13:53:04

Bonjour et merci de votre réponse.

Je connais bien cela mais comme j'ai un code comme cela :

FOR document_local in (select * from document) LOOP
END LOOP;

Je m'étais dis que je pouvais changer une valeur à l'aide du curseur implicite de la boucle for ou bien au travers du record "document".

Mais apparemment je ne peux pas affecter une valeur à un champ d'un record, je n'y ai accès qu'en lecture.
Pour l'écriture je vais être obligé de repasser par le curseur.

HORRIBLE CONSTAT, la syntaxe que vous me proposez ne fonctionne pas avec la version 8.3 de pg mais seulement avec la 8.4.
Je vais donc faire des arabesques dans mon code

Merci encore

#19 PL/pgSQL » RECORD et PLPGSQL » 10/10/2009 12:43:50

flotho
Réponses : 8

Bonjour à toutes et à tous,

Merci d'abord de la réponse rapide à mon premier post.

J'ai une question plus simple.
J'ai ouvert une boucle en FOR et je manipule un objet RECORD dans ma boucle. Est il possible de mettre à jour l'un des champs sans être obligé de repasser par définition d'un curseur, ou bien est il possible d'accéder au curseur implicitement ouvert dans la boucle?

Merci d'avance de vos réponses.

#20 Re : PL/pgSQL » Saut de ligne et PLPGSQL » 10/10/2009 11:01:16

bonjour bonjour,

Un grand merci.
Il devait être trop tard mais cela ne fonctionnait pas chez moi mais en recopiant votre code c'est opérationnel.

J'ai trouvé, sin on écrit 'mon texte' || chr(10) cela ne fonctionne pas
En revanche 'mon texte' || chr(10) || '.' alors c'est OK

Merci encore

#21 PL/pgSQL » Saut de ligne et PLPGSQL » 09/10/2009 23:25:39

flotho
Réponses : 2

Bonjour à tous,

Utilisateur averti de postgreSQL j'en suis à mon premier post sur le site mais à ma enième recherche sans réponse.
Quel caractère doit on utiliser pour faire un saut de ligne dans un RAISE NOTICE.

J'ai essayé les ||chr(13)||chr(10), j'ai essayé \n, mais rien n'y fait, impossible de formater la sortie des messages

Merci d'avance de vos conseils

Pied de page des forums

Propulsé par FluxBB