Vous n'êtes pas identifié(e).
Pages : 1
Merci,
j'avais abouti à cela comme conclusion
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
Je suis en 8.4.
Dès que j'airais le temps, je me repencherai sur le WHERE CURRENT OF
Merci pour tout
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.
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
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!
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.
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é!!
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
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
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?
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.
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
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
Je vais retester la chose,
J'ai tout supprimé et je suis en train de retélécharger la dernière version de postgresql
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?
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
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
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.
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.
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
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.
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
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
Pages : 1