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 :

Equivalent de exec ("rm ...") en plpgsql


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut Equivalent de exec ("rm ...") en plpgsql
    Bonjour,

    Je voudais savoir s'il est possible de declencher une suppressio de fichier sur une serveur au sein d'une procédure stockée.

    C'est pas facile facile à trouver comme info donc je galere un minimum et je sais que certains d'entres vous sont experts dans le domaine.

    Bonne soirée a tous.

  2. #2
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Humm ca doit etre possible mais pas en plpgsql, mais plutot en untrusted comme plperlu, je n'ai pas tester mais de tete ca pourrait donner ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE OR REPLACE FUNCTION supprimefichier(text) RETURNS int2
    AS $BODY$
     unlink($1);
     return 0;
    $BODY$ LANGUAGE 'plperlu' VOLATILE;
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  3. #3
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    ok, je te remercie, je vais vori ca des que j'auras le temps.

  4. #4
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    Desole pour la longue periode avant le test.

    J'ai donc ceci d'un coté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE FUNCTION deleteobjet(int4)
      RETURNS int4 AS
    $BODY$
    DECLARE identifiant ALIAS FOR $1;
    DECLARE urlfichier varchar(150);
    BEGIN
        ...
        urlfichier := 'c:/wamp/www/NEWAEF/img/chargimages/objets/' || identifiant || 'a.jpg';
        perform deletefichier(urlfichier);
        return 0;
    END;
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE;
    et ceci egalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE FUNCTION deletefichier(text)
      RETURNS int2 AS
    $BODY$
     unlink($1);
     return 0;
    $BODY$
      LANGUAGE 'plperl' VOLATILE;
    Comme vosu pouvez le voir, je l'ai mis en plperl car je n'ai aps plperlu et je n'arrive pas à l'activer.
    Lorsque je lance un select de ma premiere procedure, il me retourne 0 mais n'efface pas le fichier correspondant.

  5. #5
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    C'est normal, le module perl est en mode protégé, alors que perlu permet de réaliser des actions "sensibles" comme un unlink...
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  6. #6
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    ah d'accord.

    bon ben, je suis pas dans le ... moi !

    Est ce possible en python ou en dcl ?

    je suis chiant hein ?

  7. #7
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    J'ai enfin reussi à changer le mot de passe super utilisateur.

    donc j'ai peu faire un createlang avec perlu.

    Je vais donc tester ta premiere PS.

    Merci

  8. #8
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    la fonction semble marcher car je n'ai aucun message d'erreur mais mon fichier est toujours la.

    J'ai testé également avec pg_file_unlink mais il me renvoie false. j'en deduit donc qu'il ne trouve pas le fichier.

    Pfff !!

  9. #9
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    tu es sous windows ou linux ?
    pense a mettre le chemin complet ou joue avec les . et / ( ou \)
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  10. #10
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    tu peux essayer un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION supprimefichier(text) RETURNS int2
    AS $BODY$
     if(unlink($1)) 
     {
       return 1; 
      }
     else 
     {
       return 0;
     } 
    $BODY$ LANGUAGE 'plperlu' VOLATILE;
    ca te renvoi 0 si ca marche pas.

    Apparemment tu es sous windows, regarde si tu as bien les droits de delete sur le compte postgres (de windows) et essaye de faire un truc du genre :
    c://wamp//www//NEWAEF
    ou
    c:\wamp\www\NEWAEF
    ou encore
    c:\\wamp\\www\\NEWAEF

    je sais pas trop sous windows
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  11. #11
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    oui oui, il me renvoie bien 0. Ca foire !!

    je ne comprends pas ce que tu me demande concernant les droits en delete de l'utilisateur postgres "sous windows" ?

    Mais c'est pas grave. Je vais effacer mes fichiers en PHP par derriere.

    Par contre, j'essaie galement avec pg_file_unlink mais celle ci est declarée comm telle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE FUNCTION pg_file_unlink(text)
      RETURNS bool AS
    '$libdir/admin', 'pg_file_unlink'
      LANGUAGE 'c' VOLATILE STRICT;
    J'avoue ne pas comprendre d'ou vient libdir et ce que fout le repertoir admin ici.

    Je laisse tomber. Non pas par depit mais sinon je vais passer un temps fou et j'ai d'autres choses qui m'attendent.

    merci de ton aide. C'est super sympa

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