Python dentro de Postgres con PL/Python. PGDAY Ecuador 2011 PUCE Quito Milton Labanda Octubre 2011

Documentos relacionados
PL/PGSQL. Extensión "procedural" de SQL

Funciones y TriggersIntroducción, Ejemplos

SQL: Vistas, Triggers, y Procedimientos Almacenados

Programando con Pl/Python

5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

Haga clic para PostgreS cambiar el estilo

Cursores, Triggers, Indices, Transacciones, Vistas Gestión y Modelación de Datos

PROCEDIMIENTOS ALMACENADOS

TRIGGER LEONEL CADOSO ROMERO 1

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Bases de Datos 2: Procedimientos Almacenados, Funciones y Triggers. Tecnólogo en Informática, sede Paysandú Bases de Datos 2

Conceptos de Bases de Datos Relacionales Triggers

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

Utilizar la cláusula RETURNS es obligatorio al momento de definir una función y sirve para especificar el tipo de dato que será devuelto.

Departamento de Lenguajes y Sistemas Informáticos

Otros objetos de Base de Datos

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

A. Introducción. B. Los DATABASES TRIGGERS. PL/SQL en objetos de la base de datos. Oracle 11g - SQL, PL/SQL, SQL*Plus 271

CÓDIGO FUENTE EN LENGUAJE C RPMs PRE-EMPAQUETADO, EJEMPLO RPMs Y DISTRIBUCCIONES DEBBIAN (casos específicos)

1. Se usará la Base de Datos llamada. 2. Borrar la tabla CtasBanc anterior y crearla: 5.1 Procedimientos y Funciones Almacenados SQL Server

Anthony R. Sotolongo León Yudisney Vazquez Ortíz

Triggers 24/12/2016. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

PL/SQL avanzado: Secuencias, triggers, cursores y subprogramas

Triggers. BASES DE DATOS Mercedes García Merayo

GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL

Para crear una función o un procedimiento se deben usar las instrucciones CREATE FUNCTION o CREATE PROCEDURE.

PRÁCTICA T2. El lenguaje procedural PL/SQL de Oracle

Unidad 6. Procedimientos Almacenados y Disparadores

Recuperación del Sistema

Procedimientos Almacenados. Miguel Angel Garduño Cordova Isaac Méndez Hernández

Tema 5. DML (Parte II)

Formato para prácticas de laboratorio

Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:

6.1 SGBD de red. 6.2 SGBD jerárquicos.

Álvaro Herrera Modelamiento Avanzado de Datos con PostgreSQL

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

Formato para prácticas de laboratorio

Triggers en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

Python desde Cero: Bases de Datos

Características del lenguaje SQL

Introducción SQL. Ges2ón y Modelación de Datos María Constanza Pabón

Diseño e Implementación de Bases de Datos

Pre-Taller Gestión de Privilegios de Usuarios 2. Manipulación de Vistas 3. Creación y manipulación de Triggers (Introducción al uso de PL/pgsql)

Examen de Bases de datos Grado de Ingeniería en Informática, Febrero, 2015

PROCEDIMIENTOS ALMACENADOS. Transact-SQL

Modulo I: Introducción Gestores de Bases De Datos

EXAMEN: BASES DE DATOS 4º Ingeniería Informática (31 de enero de 2008)

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

Laboratorio Informix. Stored Procedures Triggers

Capítulo 8. Construcción de guiones

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

PG/PLSQL. Miguel Ángel Manso ETSI en Topografía, Geodesia y Cartografía - UPM

PROYECTO FORTALECIMIENTO LOCALES MATERIAL BÁSICO CURSO ADMINISTRACIÓN DE LAS CAPACIDADES TIC. Elaborado por: Ing. Patricia Araya Obando

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Temario. Índices simples Árboles B Hashing

SQL Sintaxis. Ejemplo de Alumno, Curso, Profesor. Esquemas de Alumno, Curso, Profesor. Andrés Moreno S.

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Guía Taller I Conexión con la Base de Datos Introducción a PostgreSQL

GUIA DE TRIGGERS (Disparadores) EN MYSQL

Diseño de bases de datos

Introducción a C# y la plataforma.net

Procedimientos Almacenados

PostgreSQL & MySQL Analisis FODA

Funciones y paquetes PL/SQL. Jonathan Medina Gómez Facultad de ingeniería Universidad de Antioquia

Oracle Database 11g: Programación con PL/SQL Nuevo

Tema II: El modelo relacional de datos. (2.7) Automatización

Sistemas de Bases de Datos II ITS / ITSB EMT CETP

Tablas -SQL Curso Bases de Datos. Por Elizabeth León Guzmán, Ph.D. Profesora Ingeniería de Sistemas Grupo de Investigación MIDAS

Base de Datos Oracle 10g: Programación con PL/SQL NUEVO

6. PROGRAMACIÓN CON TRANSACT-SQL

- Bases de Datos - - Diseño Físico - Luis D. García

Implementación de procedimientos almacenados

Bases de Datos: Structured Query Language (SQL)

Tema 1. Introducción a MySQL. José Muñoz Jimeno Octubre 2015

LENGUAJE ESTRUCTURADO DE CONSULTAS SQL (2)

Introducción a Python Qué es Python?

Gestión de nóminas diciembre 2011

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Modelamiento y Gestión de Base de Datos

Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas.

Uso de sentencias para el envió y extracción de datos

DISPARADORES EN SQL SINTAXIS GENERAL DE UN DISPARADOR EN SQL:2003

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

Transcripción:

Python dentro de Postgres con PL/Python PGDAY Ecuador 2011 PUCE Quito Milton Labanda Octubre 2011

Stored Procedures Funciones o procedimientos persistentes dentro de la Base de Datos Se necesita un Lenguaje Procedural (PL) : Un binding o una pasarela hacia el entorno real de ejecución del lenguaje escogido Se puede usar todas las posibilidades del lenguaje escogido en el procedimiento almacenado Muy útiles para extender las posibilidades de nuestra Base de Datos

Stored Procedures: funciones en Postgres Varias alternativas para escribir funciones almacenadas en Postgres : PL/PgSql PL/TCL PL/Java PL/Perl PL/Python

Por qué Python? Fácil de Leer, fácil de aprender, fácil de usar Poderoso y rápido Disponible en casi todas las distribuciones GNU/Linux, también hay para Window$ Cientos de módulos estándar y de terceros Ej: Gnome, OpenERP, Google, Yahoo, PDVSA... Un futuro muy prometedor

plpythonu: Por qué la 'u' de untrusted? PL/Python es un lenguage UNTRUSTED Sólo los superusuarios de la Base de Datos pueden crear funciones Las funciones pueden comunicarse fuera de la Base de Datos

Requerimientos Instalar PostgreSQL Instalar Python Instalar postgresql-python: apt-get install postgresql-python (en debian) Habilitar PL/Python en la Base de Datos: 1) desde dentro: bd=# CREATE LANGUAGE plpythonu; 2) desde fuera $ createlang plpythonu nombre_bd

Sintaxis para crear funciones CREATE FUNCTION nombre_funcion (...) AS $$...código python... $$ LANGUAGE plpythonu;

Una primera función CREATE OR REPLACE FUNCTION potenciapy(base float, exponente float) RETURNS float AS $$ p = base ** exponente return p $$ LANGUAGE 'plpythonu' VOLATILE;

Una primera función: resultados SELECT potenciapy(2,4) potencia - - - - - - - 16

Mapeo de Tipos de Datos boolean Smallint, int PostgreSQL Python NOTA Real, double, numeric otros arrays bool int float str listas Composite Types diccionarios Como parámetros Composite Types tuplas, listas, diccionarios, objectos de clases Python Como valores de retorno

Tipos Compuestos: tipo Postgres CREATE TYPE persona AS ( nombre TEXT, apellido TEXT );

Tipos Compuestos: clase Python CREATE FUNCTION crear_persona (nombre TEXT, apellido TEXT) RETURNS persona AS $$ class Persona: def init (self, n, a): self.nombre = n self.apellido = a return Persona(nombre, apellido) $$ LANGUAGE plpythonu;

Tipos Compuestos: acción... db=# SELECT crear_persona( 'Guido', 'van Rossum' ); crear_persona ---------------------- (Guido,"van Rossum")

setof: Múltiples resultados create or replace function pydir(dir text) returns setof text as $$ import os return os.listdir(dir) $$ language 'plpythonu';

setof: Múltiples resultados db=# select pydir('/etc/postgresql/9.0/main'); pydir ----------------- pg_ident.conf start.conf environment pg_hba.conf pg_ctl.conf postgresql.conf

Una BD para los ejemplos que siguen

plpy: Acceso a Bases de Datos PL/Python importa automáticamente el módulo plpy El módulo plpy contiene dos métodos: plpy.execute(consulta,limite) plpy.prepare(consulta,tipos) Los resultados emulan listas o diccionarios de python

plpy: Acceso a Bases de Datos create or replace function json(query text) returns setof text as $$ rs = plpy.execute(query) # devuelve una lista de diccionarios return rs $$ language 'plpythonu';

plpy: Acceso a Bases de Datos db=# select json('select titulo,hora from conferencias order by hora'); json ------------------------------------------------------- {'hora': '13:30:00', 'titulo': 'Pl/Python'} {'hora': '14:15:00', 'titulo': 'PostGIS'} {'hora': '15:00:00', 'titulo': 'nosql en PostgreSQL'}

DO: Bloques de Código Anónimos db=# do $$ import os dir = os.getcwd() plpy.info('el directorio actual es %s' % dir) $$ LANGUAGE plpythonu; INFO: El directorio actual es /home/miltonlab CONTEXTO: PL/Python anonymous code block DO

Triggers y plpython: La función create function pyaudit() returns trigger as $$ import datetime t = datetime.datetime.now(). str () d = (t,td['table_name'],td['event'],td['when']) s = '%s tabla: %s evento: %s momento: %s' % d f = open('/tmp/pypglog.txt','a') f.write(tex+'\n') f.close() $$ language plpythonu;

Triggers y plpython: el disparador CREATE TRIGGER tr_confs BEFORE INSERT OR UPDATE OR DELETE ON conferencias FOR EACH ROW EXECUTE PROCEDURE pyaudit();

Triggers y plpython: acción... db=# insert into conferencias values ( 4,'Colas con PgQ','10:45','Skytools' ); $less /tmp/pypglog.txt 2011-10-02 08:12:05.115315 tabla: conferencias evento: INSERT momento: BEFORE 2011-10-02 08:14:40.928435 tabla: conferencias evento: INSERT momento: BEFORE

Preguntas?