SlideShare uma empresa Scribd logo
1 de 10
Baixar para ler offline
PL/Python
	 et Triggers
Qu’est ce que PL/Python
Plpython est language de procédure qui permet d’écrire des fonctions
postgresql en python.

Il en existe d’autre comme plpgsql, plperl,...

Et voilà!




                                                                       2
Installation
Simplement executer dans la console postgresql:
 CREATE LANGUAGE plpythonu;



Et PL/Python est maintenant disponible comme language procédural
dans postgesql.




                                                                   3
Création d’une fonction
Hello 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
éditer une fonction
Voir 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
Triggers
Un 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
Enregistrement du trigger
Attention le CONSTRAINT est tres important, car il permet l execution du trigger au
moment du commit de la transaction, empeche ainsi de passer outre la verification
si 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
Variables utiles
Vous pouvez acceder a certaines variables dont la plus utile est
TD[‘new’] qui renvoie la ligne qui va etre inseree.

TD[‘when’] peut être utile aussi, ça contient la variable de moment
d’execution du trigger, c’est à dire que si on a enregistré le trigger pour
qu’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
Variables utiles (suite)
En ayant enregistré les triggers ainsi:
CREATE TRIGGER insert_inventaire_occ
BEFORE INSERT ON inventaire_occ
FOR EACH ROW EXECUTE PROCEDURE validate_inventaire_occ();

CREATE TRIGGER update_inventaire_occ
AFTER UPDATE ON inventaire_occ
FOR EACH ROW EXECUTE PROCEDURE validate_inventaire_occ();




                                                            9
Liens utiles
PL/Python
http://www.postgresql.org/docs/9.0/static/plpython.html
JJ



Fonctions SQL
http://msdn.microsoft.com/fr-fr/library/ms186755.aspx

Triggers SQL
http://msdn.microsoft.com/fr-be/library/ms189799.aspx




                                                          10

Mais conteúdo relacionado

Mais procurados

Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Annotation Java vs. Decorator Python
Annotation Java vs. Decorator PythonAnnotation Java vs. Decorator Python
Annotation Java vs. Decorator PythonDidier Plaindoux
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
Comprendre les scripts shell auto-extractible
Comprendre les scripts shell auto-extractibleComprendre les scripts shell auto-extractible
Comprendre les scripts shell auto-extractibleThierry Gayet
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
PHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoftPHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoftLeTesteur
 
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...Loïc Knuchel
 
PHP #2 : variables, conditions & boucles
PHP #2 : variables, conditions & boucles PHP #2 : variables, conditions & boucles
PHP #2 : variables, conditions & boucles Jean Michel
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
PHP & MYSQL #5 : fonctions
PHP & MYSQL #5 :  fonctionsPHP & MYSQL #5 :  fonctions
PHP & MYSQL #5 : fonctionsJean Michel
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
BEBUTANT JAVA
BEBUTANT  JAVABEBUTANT  JAVA
BEBUTANT JAVAviolonjo
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture zaghir
 

Mais procurados (19)

Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Annotation Java vs. Decorator Python
Annotation Java vs. Decorator PythonAnnotation Java vs. Decorator Python
Annotation Java vs. Decorator Python
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Comprendre les scripts shell auto-extractible
Comprendre les scripts shell auto-extractibleComprendre les scripts shell auto-extractible
Comprendre les scripts shell auto-extractible
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
PHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoftPHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoft
 
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
 
Promises Javascript
Promises JavascriptPromises Javascript
Promises Javascript
 
PHP #2 : variables, conditions & boucles
PHP #2 : variables, conditions & boucles PHP #2 : variables, conditions & boucles
PHP #2 : variables, conditions & boucles
 
My sql console
My sql consoleMy sql console
My sql console
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Code java jmm
Code java jmmCode java jmm
Code java jmm
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
PHP & MYSQL #5 : fonctions
PHP & MYSQL #5 :  fonctionsPHP & MYSQL #5 :  fonctions
PHP & MYSQL #5 : fonctions
 
Cours php
Cours phpCours php
Cours php
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
BEBUTANT JAVA
BEBUTANT  JAVABEBUTANT  JAVA
BEBUTANT JAVA
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 

Destaque

Sealvia® - Ultra mince et ultra efficace !
Sealvia® - Ultra mince et ultra efficace !Sealvia® - Ultra mince et ultra efficace !
Sealvia® - Ultra mince et ultra efficace !Eurovia_Group
 
Guia de aprendizaje 01
Guia de aprendizaje 01Guia de aprendizaje 01
Guia de aprendizaje 01juliana800407
 
Mineria un negocio global Herman García
Mineria un negocio global  Herman GarcíaMineria un negocio global  Herman García
Mineria un negocio global Herman GarcíaDistritos Mineros
 
Diseño de Proyectos Grupo 102058_310 Proyecto Final 40%
Diseño de Proyectos Grupo 102058_310 Proyecto Final 40% Diseño de Proyectos Grupo 102058_310 Proyecto Final 40%
Diseño de Proyectos Grupo 102058_310 Proyecto Final 40% politecnico agroindustrial
 
Sistemas de gestión de bases de datos
Sistemas de gestión de bases de datosSistemas de gestión de bases de datos
Sistemas de gestión de bases de datosUniversidad de Panamá
 
Comparaison industrie d'observation des baleines
Comparaison industrie d'observation des baleinesComparaison industrie d'observation des baleines
Comparaison industrie d'observation des baleinesmyriambeauchamp
 
Invitation soiree installation_du_17_10_2013
Invitation soiree installation_du_17_10_2013Invitation soiree installation_du_17_10_2013
Invitation soiree installation_du_17_10_2013Internat Lyon Saihl
 
MañAna Comienza El Pgx 4
MañAna Comienza El Pgx 4MañAna Comienza El Pgx 4
MañAna Comienza El Pgx 4molusco18
 
Informe Semanal de Análisis Técnico de Cortal Consors - 6 de septiembre
Informe Semanal de Análisis Técnico de Cortal Consors - 6 de septiembreInforme Semanal de Análisis Técnico de Cortal Consors - 6 de septiembre
Informe Semanal de Análisis Técnico de Cortal Consors - 6 de septiembreSalainversion
 
Présentation i ciné
Présentation i cinéPrésentation i ciné
Présentation i cinéNicolafamix
 
Portfolio - Christopher Lopes
Portfolio  - Christopher LopesPortfolio  - Christopher Lopes
Portfolio - Christopher LopesChristopher Lopes
 

Destaque (20)

La Maintenance1
La Maintenance1La Maintenance1
La Maintenance1
 
Stendhal - Le Rouge et le noir, part.I- chap.1
Stendhal - Le Rouge et le noir, part.I- chap.1Stendhal - Le Rouge et le noir, part.I- chap.1
Stendhal - Le Rouge et le noir, part.I- chap.1
 
Sealvia® - Ultra mince et ultra efficace !
Sealvia® - Ultra mince et ultra efficace !Sealvia® - Ultra mince et ultra efficace !
Sealvia® - Ultra mince et ultra efficace !
 
Interview aisp diane wiltzer
Interview  aisp   diane wiltzerInterview  aisp   diane wiltzer
Interview aisp diane wiltzer
 
Guia de aprendizaje 01
Guia de aprendizaje 01Guia de aprendizaje 01
Guia de aprendizaje 01
 
Mineria un negocio global Herman García
Mineria un negocio global  Herman GarcíaMineria un negocio global  Herman García
Mineria un negocio global Herman García
 
Seminario alumni
Seminario alumniSeminario alumni
Seminario alumni
 
La Universidad
La UniversidadLa Universidad
La Universidad
 
Diseño de Proyectos Grupo 102058_310 Proyecto Final 40%
Diseño de Proyectos Grupo 102058_310 Proyecto Final 40% Diseño de Proyectos Grupo 102058_310 Proyecto Final 40%
Diseño de Proyectos Grupo 102058_310 Proyecto Final 40%
 
Sistemas de gestión de bases de datos
Sistemas de gestión de bases de datosSistemas de gestión de bases de datos
Sistemas de gestión de bases de datos
 
Comparaison industrie d'observation des baleines
Comparaison industrie d'observation des baleinesComparaison industrie d'observation des baleines
Comparaison industrie d'observation des baleines
 
Invitation soiree installation_du_17_10_2013
Invitation soiree installation_du_17_10_2013Invitation soiree installation_du_17_10_2013
Invitation soiree installation_du_17_10_2013
 
Ma ville ma région
Ma ville ma régionMa ville ma région
Ma ville ma région
 
Packages version Francais
Packages version FrancaisPackages version Francais
Packages version Francais
 
Aa lignesde fuite
Aa lignesde fuiteAa lignesde fuite
Aa lignesde fuite
 
MañAna Comienza El Pgx 4
MañAna Comienza El Pgx 4MañAna Comienza El Pgx 4
MañAna Comienza El Pgx 4
 
Informe Semanal de Análisis Técnico de Cortal Consors - 6 de septiembre
Informe Semanal de Análisis Técnico de Cortal Consors - 6 de septiembreInforme Semanal de Análisis Técnico de Cortal Consors - 6 de septiembre
Informe Semanal de Análisis Técnico de Cortal Consors - 6 de septiembre
 
Présentation i ciné
Présentation i cinéPrésentation i ciné
Présentation i ciné
 
Matt pokora
Matt pokoraMatt pokora
Matt pokora
 
Portfolio - Christopher Lopes
Portfolio  - Christopher LopesPortfolio  - Christopher Lopes
Portfolio - Christopher Lopes
 

Semelhante a Plpython et Triggers

PL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéesPL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéessmiste
 
Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTASidereo
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natifHenri Gomez
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0adrienhautot
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Joël Séguillon
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 

Semelhante a Plpython et Triggers (20)

PL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéesPL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de données
 
Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTA
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
oracle : le PL-SQL
oracle : le PL-SQLoracle : le PL-SQL
oracle : le PL-SQL
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Mysql
MysqlMysql
Mysql
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Kick starting OpenERP
Kick starting OpenERPKick starting OpenERP
Kick starting OpenERP
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Synthese
SyntheseSynthese
Synthese
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 

Plpython et Triggers

  • 2. Qu’est ce que PL/Python Plpython est language de procédure qui permet d’écrire des fonctions postgresql en python. Il en existe d’autre comme plpgsql, plperl,... Et voilà! 2
  • 3. Installation Simplement executer dans la console postgresql: CREATE LANGUAGE plpythonu; Et PL/Python est maintenant disponible comme language procédural dans postgesql. 3
  • 4. Création d’une fonction Hello 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. éditer une fonction Voir 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. Triggers Un 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. Enregistrement du trigger Attention le CONSTRAINT est tres important, car il permet l execution du trigger au moment du commit de la transaction, empeche ainsi de passer outre la verification si 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. Variables utiles Vous pouvez acceder a certaines variables dont la plus utile est TD[‘new’] qui renvoie la ligne qui va etre inseree. TD[‘when’] peut être utile aussi, ça contient la variable de moment d’execution du trigger, c’est à dire que si on a enregistré le trigger pour qu’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. Variables utiles (suite) En ayant enregistré les triggers ainsi: CREATE TRIGGER insert_inventaire_occ BEFORE INSERT ON inventaire_occ FOR EACH ROW EXECUTE PROCEDURE validate_inventaire_occ(); CREATE TRIGGER update_inventaire_occ AFTER UPDATE ON inventaire_occ FOR EACH ROW EXECUTE PROCEDURE validate_inventaire_occ(); 9