PL/Python	 et Triggers
Qu’est ce que PL/PythonPlpython est language de procédure qui permet d’écrire des fonctionspostgresql en python.Il en exis...
InstallationSimplement executer dans la console postgresql: CREATE LANGUAGE plpythonu;Et PL/Python est maintenant disponib...
Création d’une fonctionHello world en plpython: CREATE FUNCTION hello_world()   RETURNS varchar     AS $$       return ‘He...
éditer une fonctionVoir le contenu d une fonction: SELECT prosrc FROM pg_proc WHERE proname=’hello_world’;Ainsi nous pouvo...
TriggersUn exemple d’utilisation de ces fonctions est dans les triggers SQL.Ainsi on peut décider d’executer une fonction ...
Enregistrement du triggerAttention le CONSTRAINT est tres important, car il permet l execution du trigger aumoment du comm...
Variables utilesVous pouvez acceder a certaines variables dont la plus utile estTD[‘new’] qui renvoie la ligne qui va etre...
Variables utiles (suite)En ayant enregistré les triggers ainsi:CREATE TRIGGER insert_inventaire_occBEFORE INSERT ON invent...
Liens utilesPL/Pythonhttp://www.postgresql.org/docs/9.0/static/plpython.htmlJJFonctions SQLhttp://msdn.microsoft.com/fr-fr...
Prochain SlideShare
Chargement dans…5
×

Plpython et Triggers

452 vues

Publié le

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
452
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
3
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Plpython et Triggers

  1. 1. PL/Python et Triggers
  2. 2. Qu’est ce que PL/PythonPlpython est language de procédure qui permet d’écrire des fonctionspostgresql en python.Il en existe d’autre comme plpgsql, plperl,...Et voilà! 2
  3. 3. InstallationSimplement executer dans la console postgresql: CREATE LANGUAGE plpythonu;Et PL/Python est maintenant disponible comme language procéduraldans postgesql. 3
  4. 4. Création d’une fonctionHello world en plpython: CREATE FUNCTION hello_world() RETURNS varchar AS $$ return ‘Hello world’ $$ LANGUAGE plpythonu;Elle est alors accessible en postgresql: select hello_world();Pour supprimer une fonction (attention aux parenthèses): drop function hello_world() 4
  5. 5. éditer une fonctionVoir le contenu d une fonction: SELECT prosrc FROM pg_proc WHERE proname=’hello_world’;Ainsi nous pouvons modifier le contenu de la fonction: UPDATE pg_proc SET prosrc = ‘return «hello world2»’ WHERE proname = ’hello_world’; 5
  6. 6. TriggersUn exemple d’utilisation de ces fonctions est dans les triggers SQL.Ainsi on peut décider d’executer une fonction avant ou après un update, insert, ... Exemple d’une fonction plus complexe CREATE FUNCTION validate_birthedanimal() RETURNS trigger AS $$ animal = TD[‘new’][‘animal_pk’] select_animal = plpy.prepare(»»» SELECT birthedanimal_pk, operation_isvalid FROM birthedanimal, declarationnaissance, operation WHERE animal_pk = ‘%s’ AND declarationnaissance_naiss_pk = naiss_pk AND operation_operation_id = operation_id AND operation_isvalid = true»»» % animal) result_animal = plpy.execute(select_animal) if len(result_animal) > 1: raise plpy.error(‘Key %s already exist’ % animal) $$ LANGUAGE plpythonu; 6
  7. 7. Enregistrement du triggerAttention le CONSTRAINT est tres important, car il permet l execution du trigger aumoment du commit de la transaction, empeche ainsi de passer outre la verificationsi 2 transaction sont envoyées au meme moment. Enregistrement du trigger CREATE CONSTRAINT TRIGGER insert_update_birthedanimal AFTER INSERT OR UPDATE ON birthedanimal FOR EACH ROW EXECUTE PROCEDURE validate_birthedanimal(); 7
  8. 8. Variables utilesVous pouvez acceder a certaines variables dont la plus utile estTD[‘new’] qui renvoie la ligne qui va etre inseree.TD[‘when’] peut être utile aussi, ça contient la variable de momentd’execution du trigger, c’est à dire que si on a enregistré le trigger pourqu’il s execute avant (BEFORE) une insertion, TD[‘when’] sera égal à‘BEFORE’. Ainsi on peut créer des condition du genre: moment = TD[‘when’] select_inventaire_occ = plpy.prepare(...) result_inventaire_occ = plpy.execute(select_inventaire_occ) if (moment == ‘BEFORE’ and result_inventaire_occ): raise plpy.error(‘Key %s %s already exist’ % (numTroupeau, dateYear)) elif (moment == ‘AFTER’ and len(result_inventaire_occ) > 1): raise plpy.error(‘Key %s %s already exist’ % (numTroupeau, dateYear)) 8
  9. 9. Variables utiles (suite)En ayant enregistré les triggers ainsi:CREATE TRIGGER insert_inventaire_occBEFORE INSERT ON inventaire_occFOR EACH ROW EXECUTE PROCEDURE validate_inventaire_occ();CREATE TRIGGER update_inventaire_occAFTER UPDATE ON inventaire_occFOR EACH ROW EXECUTE PROCEDURE validate_inventaire_occ(); 9
  10. 10. Liens utilesPL/Pythonhttp://www.postgresql.org/docs/9.0/static/plpython.htmlJJFonctions SQLhttp://msdn.microsoft.com/fr-fr/library/ms186755.aspxTriggers SQLhttp://msdn.microsoft.com/fr-be/library/ms189799.aspx 10

×