Introducción A PostgreSQL
Introducción A PostgreSQL
Introducción A PostgreSQL
Introducción a PostgreSQL
Facultad de Ingeniería
Enrique Felipe Anastacio
Base de Datos
¿Qué es PostgreSQL?
PostgreSQL es un sistema manejador de bases de datos relacionales
basado en postgres 4.2, desarrollado en el departamento Berkeley de
Ciencias de la computación en la universidad de California. Postgres es
Open Source descendiente del código original “Berkeley”, soporta el
estándar SQL y ofrece otros recursos tales como:
○ complex queries
○ foreign keys
○ Triggers
○ Views
○ transactional integrity
○ multiversion concurrency control
○ index methods
○ procedural languages
Introducción a PostgreSQL
SELECT version();
SELECT current_date;
SELECT 2 + 2;
Facultad de Ingeniería
Enrique Felipe Anastacio
Base de Datos
Introducción a PostgreSQL
Ahora crearemos una tabla llamada climas,
este ejemplo nos servirá para verificar su
estructura:
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Create.
Ahora crearemos otra tabla llamada ciudades,
una de las cualidades de esta es que utilizara
un tipo de dato especifico de postgres, el tipo
POINT.
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Insert.
Ya creadas nuestras tablas ahora
procederemos a utilizar INSERT el Statement
(Sentencia) que nos servirá para insertar
datos en nuestras tablas, su sintaxis puede
ser alguna de las siguientes:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Select.
Como se menciono anteriormente postgres soporta el estándar
SQL así que para realizar una consulta, puede utilizar el SELECT
con sus respectivas cláusulas FROM, WHERE y los operadores.
Por ejemplo:
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Operadores.
--Muestra todos los registros ordenados por el nombre de la
ciudad
SELECT * FROM climas ORDER BY ciudad;
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Join.
Muchas veces necesitamos acceder a mas de una
tabla al mismo tiempo, para ello utilizares los joins
que nos permitirán acceder a múltiples registros de
dos o mas tablas al mismo tiempo. Un JOIN es la
unión de dos o mas tablas. Por ejemplo:
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Funciones.
Las funciones de agregación realizan
operaciones con un conjunto de valores. Por
ejemplo:
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Update.
Esta sentencia se utiliza para actualizar
algunos datos o cuando estos han
cambiado o simplemente por algún error
en la inserción Por ejemplo:
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Delete.
La sentencia Delete se utiliza para eliminar
registros de las tablas, Por ejemplo:
Su sintaxis es:
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Herencia.
Este es un concepto básico de las base de datos
orientados a objetos, por ejemplo considere dos
tablas:
MATCH tipo
ON DELETE accion
ON UPDATE accion
FULL: No permite que una columna tenga el valor NULL en una clave
foránea compuesta por varias columnas
SIMPLE: Permite que una columna tenga el valor NULL en una clave
foránea compuesta por varias columnas
Facultad de Ingeniería
Enrique Felipe Anastacio
Action :
Introducción a PostgreSQL
Enrique Felipe Anastacio
Base de Datos
Vistas.
Una vista es una tabla virtual que puede contener
campos de una o varias tablas, y estas a su vez se
manipulan como tablas, cualquier Statement SELECT
puede ser una vista. Para crear una vista:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Transacciones.
Nos permiten ejecutar múltiples consultas y hacer
que todas se ejecuten o que ninguna lo haga.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
Se almacenan y ejecutan desde el proceso de
base de datos y no desde la aplicación del
cliente.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
Estos lenguajes deben ser instalados en
la base de datos previamente antes de
ser utilizados.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
VENTAJAS DEL USO DE FUNCIONES
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
VENTAJAS DEL USO DE FUNCIONES
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
DESCRIPCION DEL LENGUAJE.
ESTRUCTURA DE PL/pgSQL
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
DESCRIPCION DEL LENGUAJE.
ESTRUCTURA DE PL/pgSQL
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
DEFINIENDO LOS PARAMETROS DE LAS FUNCIONES
Cabe notar que podemos utilizar como parámetros todos los tipos
usados por PostgreSQL, es decir : INTEGER, DATE, TIME,
VARCHAR, CHAR, TIMESTAMP, REAL, TEXT y muchos otros, e
inclusive tipos definidos por el usuario por medio de la instrucción
CREATE TYPE.
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
DEFINICION DE VARIABLES LOCALES O DE FUNCION
Como explicamos anteriormente, las variables locales son definidas dentro de la sección
DECLARE de la función, de forma muy similar a otros lenguajes podemos definir variables,
por ejemplo :
DECLARE
contador integer = 0;
cadena varchar;
hoy date;
bandera bool;
suma real;
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
ASIGNACION DE LAS SENTENCIAS DE PL/pgSQL
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
RETORNANDO EL UN VALOR COMO FUNCION
...resto de la función...
RETURN <variable>;
...resto de la función...
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
RETORNANDO EL UN VALOR COMO FUNCION
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
UTILIZANDO SENTENCIAS DE CONTROL
LOOP
EXIT
IF, ELSE
FOR
WHILE
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
UTILIZANDO SENTENCIAS DE CONTROL
...resto de la función...
LOOP
...sentencias a ejecutar en el ciclo...
END LOOP
...resto de la función...
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIA DE SALIDA EXIT :
LOOP
...resto de la función...
contador := contador + 1;
IF contador >= 10 THEN
EXIT; -- salida del loop cuando sea mayor o igual que 10
END IF;
END LOOP
...resto de la función...
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIAS IF, ELSE :
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIAS IF, ELSE :
Ejemplo :
...resto de la función...
IF >= 10 or THEN
RETURN true;
ELSE
RETURN false;
END IF;
...resto de la función...
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIA DE CICLO FOR :
Existen dos tipos de ciclos FOR, el primero tiene que ver claramente con
los ciclos numéricos comunes, es decir, lo que comúnmente se usa para
efectuar repeticiones, y por otra parte, tenemos un ciclo FOR que nos
permite recorrer tablas y procesar sus datos, esta segunda está ligada a
sentencias SQL, veamos entonces como se utiliza la sentencia FOR
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIA DE CICLO FOR :
Ejemplo :
...resto de la función...
FOR inc IN 1..10 LOOP
factorial := factorial * inc;
END LOOP;
RETURN factorial;
...resto de la función…
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIA DE CICLO FOR :
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIA DE CICLO FOR :
Ejemplo :
...resto de la función...
DECLARE
registro RECORD;
BEGIN
FOR registro IN SELECT * FROM productos LOOP
stock := registro.sock_actual + 100;
... otras sentencias ...
END LOOP;
...resto de la función...
Note que para utilizar esta sentencia FOR debemos declarar una variable
de tipo RECORD o registro. RECORD es una palabra reservada para
estos casos, y no posee una estructura definida pues no ha sido asignada
a ninguna tabla, este tipo de dato nos permite recorrer la tabla de
productos y obtener sus valores por medio de esta variable.
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIA DE CICLO CONDICIONAL WHILE
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
SENTENCIA DE CICLO CONDICIONAL WHILE
Ejemplo :
...resto de la función...
WHILE inc <= 10 LOOP
factorial := factorial * inc;
END LOOP;
RETURN factorial;
...resto de la función...
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
Ejemplo 1 : Buscar una Ciudad y retornar si existe o no
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
Ejemplo 2 : Buscar un producto y actualiza su precio según porcentaje
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
Ejemplo 3 : Incrementar valores según el porcentaje de IVA
Esta función no actualiza realmente los datos de la tabla, solamente procesa los
parámetros, de tal manera que si los datos ingresados fueran los de una tabla
devolvería el valor mas IVA.
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Funciones.
LLAMANDO A LAS FUNCIONES
SELECT buscar_ciudad('Mexico');
SELECT SUMA(4,5);
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Un disparador se puede definir de las siguientes
maneras:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Creamos una base de datos para utilizarla con
nuestros ejemplos.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Después tenemos que crear una función en PL/pgSQL
para ser usada por nuestro disparador. Nuestra primera
función es la más simple que se puede definir y lo único
que hará será devolver el valor NULL:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
A continuación definimos en la tabla numeros un disparador del tipo
BEFORE / row-level para la operación DELETE.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Ahora vamos a definir una nueva función un poco más complicada y un nuevo
disparador en nuestra tabla numeros:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Ahora vamos a ver como los disparadores que hemos definido en la tabla
numeros funcionan:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
El valor de la variable NEW al empezar a ejecutarse rellenar_datos() es
numero=2, cuadrado=NULL, cubo=NULL, raiz2=NULL, raiz3=NULL.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
INSERT INTO numeros (numero) VALUES (3);
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Ahora vamos a ver como los disparadores que hemos definido en la
tabla numeros funcionan:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Hemos realizado 2 INSERT y 1 UPDATE. Esto significa que por
cada uno de estos comandos el sistema ha ejecutado la función
rellenar_datos(), una vez por cada fila afectada y antes de
actualizar la tabla numeros.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Para eliminar/borrar un trigger, tenemos la siguiente sentencia:
CASCADE
RESTRICT
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
A continuación crearemos un disparador único para las sentencias INSERT,
UPDATE y DELETE. Para ello utilizaremos la variable TG_OP.
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
CREATE TRIGGER proteger_y_rellenar_datos BEFORE INSERT
OR UPDATE OR DELETE
ON numeros FOR EACH ROW
EXECUTE PROCEDURE proteger_y_rellenar_datos();
Facultad de Ingeniería
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Ahora vamos a definir un disparador del tipo statement-level que
se ejecute después de nuestras sentencias INSERT, UPDATE y
DELETE. La función ejecutada por este disparador grabará
datos de la ejecución en la tabla cambios.
Para demostrar cómo podemos utilizar esto vamos a definir una
nueva tabla:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
La función la podemos definir así:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
Y el disparador lo crearíamos de la siguiente forma:
Introducción a PostgreSQL.
Enrique Felipe Anastacio
Base de Datos
Disparadores (triggers).
A continuación podemos ver como funcionaría:
Ingresamos un valor:
INSERT INTO numeros (numero) VALUES (100);