IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

besoin d aide pour les fonction en postgresql


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 3
    Points
    3
    Par défaut besoin d aide pour les fonction en postgresql
    bonjour

    je suis nouveau ici
    je m appelle william et je commence un pojet asser important en
    postgresql que j ai jaimmais utiliser

    je me pose plein de question et j espere que vous pourier m aider
    pour un insert j aimerai utiliser une fonction que j ai decomposer en 1
    fonction qui appelle 2 sous fonction,la principale appelle addid et dpass que voici

    CREATE OR REPLACE FUNCTION addid(x integer, chaine text)
    RETURNS text AS
    $BODY$

    if x > -1:
    if chaine == 'Z'
    chaine[x]
    chaine = addid (--x,chaine)
    else :
    if chaine[x]=='9'
    chaine[x]='a'
    else :
    $chaine[x]++
    return chaine

    return chaine

    $BODY$
    LANGUAGE 'plpythonu' VOLATILE;

    2 la sous fonction

    CREATE OR REPLACE FUNCTION dpass()
    RETURNS text AS
    $BODY$

    pass="";
    pass[0]=random(a..z);
    i=0;
    while i<4
    pass[I]=random(1..9);

    return pass

    $BODY$
    LANGUAGE 'plpythonu' VOLATILE;

    voici la fonction principql que j aimerai appeller en php
    ---------------------------------------------------------------

    CREATE OR REPLACE FUNCTION add_client(nom text, prenom text, mail text)
    RETURNS boolean AS
    $BODY$

    DECLARE
    liste record;
    id text;
    nid text;
    npass text;

    begin
    FOR liste IN select fin_client from index_serveur where id=1 LOOP
    id=liste[0];
    END LOOP;

    nid=addid (5,id);
    update index_serveur set fin_client=nid where id=1;

    npass= dpass ();
    insert into client values (nid,npass,nom,mail,'I','0','',prenom);

    return true;
    end
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;

    si tout ca est accepter par l editeur de requete pgqdmin3
    je ne suis pas du tout sur que ca fonctionne et que la syntaxe est bonne


    question 1
    ----------------
    est qu'on peut faire des sous fonction en postgresql

    question 2
    ---------------
    comment tester ca dans pgadmin3

    question 3
    --------------------
    peut on appeller une fonction plpython par une fonction plpgsql

    question 4
    ---------------
    j ai reussie a me connecter en php faire un insert ou un select
    mais je ne trouve pas comment appeller la fonction en php

    question 5
    ---------------
    je tester les fonction en addid et dpass en php ca fonctionne
    mais je pense que l execution sera plus rapide sur le serveur sql et plus facile pour les backup ,mais une confirmation de ca serai la bienvenu

    un grand merci pour votre aide d'avance

    willl

  2. #2
    Membre habitué Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Points : 197
    Points
    197
    Par défaut
    Y a t il une raison particulière à passer de fonction plpgslq à python ou l'inverse ? Il vaut mieux n'en garder qu'un seul (perso : plpgsql). Tu peux sans pb appeler une fonction Python dans plpgsql.

    Cette partie est bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FOR liste IN select fin_client from index_serveur where id=1 LOOP
    id=liste[0];
    END LOOP;
     
    nid=addid (5,id);
    Au début, tu recupères une valeur dans chaque ligne de ta requete et ensuite, tu n'utilises que le dernier !!!

    Sur ta fonction "add_client" le type de retour est un boolean, mais tu ne renvoie que true. Ca sert peut être plus à grand chose.

    De plus, tu utilises une variable id alors que dans ta requête "where id=1" tu as un id mais en tant que champs.

    Je ne connais pas le Python, mais es tu sûr que la syntaxe suivante est correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                 if chaine == 'Z'
                    chaine[x]   // <----------------- A quoi ça sert ???
                    chaine = addid (--x,chaine)
    Pour tester une fonction, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nomdelafonction(param1,param2,...);
    Tu as du remarquer que dans pgqdmin3 la fonction a été ajouté dans la catégorie "Fonctions". Pour tester la requête, ouvre une fenêtre SQL et lance la requête ci dessus.

    sous php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = pg_query($cn, "SELECT nomdelafonction(param1,param2,...);");
    Mais si tout ça fonctionne, Bravo !!

    A+
    Sud04

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 3
    Points
    3
    Par défaut reponse
    un grand merci pour ton aide

    j ai jammais fait du python
    mais je pense qu il est plus adapter a des fonction de chaine de caractere
    et je ne vois pas comment faire une fonction recursive en plpgsql

    quand a la partie
    FOR liste IN SELECT fin_client FROM index_serveur WHERE id=1 LOOP
    id=liste[0];
    END LOOP;
    j ai vue ca sur un autre forum j ai trouver ca bizare aussi

    j ai pas encore debuger c est function on elle ete accepter par pgadmi mais n on jammais tourner car je ne savais comment faire maintenant j espere que ca va aller grace a toi

    bien vu pour le mauvais non de variable id
    je vais suivre tes reponse pour debuguer tout ca

    tu pourrai me dire si on peut faire des fonction recursive en plpgsql

    quand au chaine[x] il s'agit de tester ou modifier le le cartere x de la string chaine comme dans de nombreux language je dois verifier si sa marche en python

    encore merci je revient vert toi une fois les test fait

  4. #4
    Membre habitué Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Points : 197
    Points
    197
    Par défaut
    J'ai jamais de récursivité en plpgsql. Je ne sais pas si c'est possible. Si quelqu'un d'autre peut répondre !!!
    quand au chaine[x] il s'agit de tester ou modifier le le cartere x de la string chaine comme dans de nombreux language je dois verifier si sa marche en python
    Je ne comprends pas trop cet enchaînement, mais si ça marche...

    A+
    Sud04

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 3
    Points
    3
    Par défaut probleme de droit
    bonjour

    j ai essayer tout la journee de faire tournee les fonciton sur le serveur postgresql sans succes estimant perdant beaucoup de temp et n'etant pas sur de pouvoir faire des fonction recusive j ai tout fait en php resulta ca fonctionne et ca va tres vite casi instantané

    j ai un autre petit souci j ai mis un captcha et un session ansi que verification de tout les champ mais j aurai voulu rajouter la securiter d une connection avec un user limiter en droit j ai bon tripoter dans pgadmin 3 ca marche pas poutrant j ai

    j ai reussi a enlever les droit de postgres par securite
    j ai ca dans la table en question
    GRANT INSERT ON TABLE client TO insert_client_groupe WITH GRANT OPTION;

    et l utilisateur insert_client appartient insert_cl
    GRANT inser_cl TO insert_client;

    il se connect mais me dit qu il pas le droit

    un grand merci pour votre aide

    will

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 3
    Points
    3
    Par défaut petit erreur
    dans la table client
    j ai session comme grant

    GRANT INSERT ON TABLE client TO inser_cl WITH GRANT OPTION;

    et non

    GRANT INSERT ON TABLE client TO insert_client_groupe WITH GRANT OPTION;

    merci

Discussions similaires

  1. Encore un noob qui a besoin d'aide pour les formules
    Par efk pharos dans le forum Formules
    Réponses: 5
    Dernier message: 17/01/2007, 01h46
  2. [PHP-JS] Besoin d'aide pour les bases en php !
    Par stevefigueras dans le forum Langage
    Réponses: 1
    Dernier message: 15/12/2006, 13h36
  3. Besoin d'aide pour les dates
    Par Aurore_atmo dans le forum MATLAB
    Réponses: 6
    Dernier message: 03/07/2006, 15h37
  4. [Mail] besoin d'aide pour la fonction mail
    Par laymounos dans le forum Langage
    Réponses: 5
    Dernier message: 07/06/2006, 21h16
  5. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo