You are on page 1of 56

GUA LABORATORIO BASE DE DATOS III SIS 306

ING. ENRIQUE YAEZ VENEGAS

SUCRE 2010

NDICE
SISTEMA DE GESTIN DE DATOS POSTGRESQL

Caractersticas Principales

INTRODUCCIN A POSTRGRESQL

Ingresando a PostgreSQL, Manejo de Base de Datos, Esquemas, Tablas, DDL, DML

PRCTICA N 1: S ISTEMA DE G ESTIN DE D ATOS P OSTGRE SQL

Atributos y restricciones, Dominios, Secuencias.

PRCTICA N 2: P ROCEDIMIENTOS A LMACENADOS EN P OSTGRE SQL

P1: Lenguaje PL/PgSQL,

SISTEMA DE GESTIN DE DATOS POSTGRESQL

BASE DE DATOS III

GUA DE LABORATORIO

POSTGRESQL

Desarrollador PostgreSQL Global Development Group www.postgresql.org Informacin general ltima versin estable 9.0 (20 de septiembre de 2010) Gnero Sistema operativo Licencia En espaol RDBMS Multiplataforma BSD

PostgreSQL es un sistema de gestin de base de datos relacional orientada a objetos y libre, publicado bajo la licencia BSD. Como muchos otros proyectos de cdigo abierto, el desarrollo de PostgreSQL no es manejado por una sola empresa sino que es dirigido por una comunidad de desarrolladores y organizaciones comerciales las cuales trabajan en su desarrollo. Dicha comunidad es denominada el PGDG (PostgreSQL Global Development Group).

BASE DE DATOS III

GUA DE LABORATORIO

CARACTERSTICAS
Algunas de sus principales caractersticas son, entre otras:

A LTA CONCURRENCIA
Mediante un sistema denominado MVCC (Acceso concurrente multiversin, por sus siglas en ingls) PostgreSQL permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene una visin consistente de lo ltimo a lo que se le hizo commit. Esta estrategia es superior al uso de bloqueos por tabla o por filas comn en otras bases, eliminando la necesidad del uso de bloqueos explcitos.

A MPLIA VARIEDAD DE TIPOS NATIVOS


PostgreSQL provee nativamente soporte para:

Nmeros de precisin arbitraria. Texto de largo ilimitado. Figuras geomtricas (con una variedad de funciones asociadas) Direcciones IP (IPv4 e IPv6). Bloques de direcciones estilo CIDR. Direcciones MAC. Arrays.

Adicionalmente los usuarios pueden crear sus propios tipos de datos, los que pueden ser por completo indexables gracias a la infraestructura GiST de PostgreSQL. Algunos ejemplos son los tipos de datos GIS creados por el proyecto PostGIS.

O TRAS CARACTERSTICAS

Claves ajenas tambin denominadas Llaves ajenas o Claves Forneas (foreign keys). Disparadores (triggers): Un disparador o trigger se define en una accin especifica basada en algo ocurrente dentro de la base de datos. En PostgreSQL esto significa la ejecucin de un procedimiento almacenado basado en una determinada accin sobre una tabla especfica.

Entonces combinando estas seis caractersticas, PostgreSQL le permitir crear una amplia funcionalidad a travs de su sistema de activacin de disparadores (triggers).

Vistas. Integridad transaccional. Herencia de tablas. Tipos de datos y operaciones geomtricas.

BASE DE DATOS III

GUA DE LABORATORIO

Soporte para transacciones distribuidas. Permite a PostgreSQL integrase en un sistema distribuido formado por varios recursos (p.ej, una base de datos PostgreSQL, otra Oracle, una cola de mensajes IBM MQ JMS y un ERP SAP) .

FUNCIONES
Bloques de cdigo que se ejecutan en el servidor. Pueden ser escritos en varios lenguajes, con la potencia que cada uno de ellos da, desde las operaciones bsicas de programacin, tales como bifurcaciones y bucles, hasta las complejidades de la programacin orientada a objetos o la programacin funcional. Los disparadores (triggers en ingls) son funciones enlazadas a operaciones sobre los datos. Algunos de los lenguajes que se pueden usar son los siguientes:

Un lenguaje propio llamado PL/PgSQL (similar al PL/SQL de oracle). C. C++. Java PL/Java web. PL/Perl. plPHP. PL/Python. PL/Ruby. PL/sh. PL/Tcl. PL/Scheme. Lenguaje para aplicaciones estadsticas R por medio de PL/R.

PostgreSQL soporta funciones que retornan "filas", donde la salida puede tratarse como un conjunto de valores que pueden ser tratados igual a una fila retornada por una consulta (query en ingls). Las funciones pueden ser definidas para ejecutarse con los derechos del usuario ejecutor o con los derechos de un usuario previamente definido. El concepto de funciones, en otros DBMS, son muchas veces referidas como "procedimientos almacenados" (stored procedures en ingls).1

http://es.wikipedia.org/wiki/PostgreSQL

BASE DE DATOS III

GUA DE LABORATORIO

INTRODUCCIN A POSTGRESQL
INGRESANDO A POSTGRESQL, MANEJO DE BASE DE DATOS, ESQUEMAS, TABLAS, DDL, DML

BASE DE DATOS III

GUA DE LABORATORIO

1.- INGRESANDO A POSTGRESQL


1. Iniciar el servicio 2. Ingresar a pgAdmin III

Una vez abierta la pantalla hacer doble click en PostgreSQL : Database Server etc.:

Se habilitan las opciones siguientes:

ING. ENRIQUE YAEZ VENEGAS

Pgina 6

BASE DE DATOS III

GUA DE LABORATORIO

BARA DE HERRAMIENTAS

Aadir Conexin a un servidor

Visualizar o editar las propiedades del objeto seleccionado

Visualizar la ayuda

Abrir la consola de consultas

Actualizar el objeto seleccionado

Eliminar el objeto seleccionado

Crear un objeto igual al objeto seleccionado

Opciones de mantenimiento de la base de datos

EXPLORADOR DE OJBJETOS Y VENTANA DE PROPIEDADES

Permite explorar las diferentes bases de datos, tablas, esquemas triggers y objetos que creemos dentro de postgres.

Permite explorar las propiedades del objeto seleccionado; como podemos ver en la pantalla tenemos seleccionada la base de datos test y podemos observar su nombre, propietario y codificado por ejemplo.

ING. ENRIQUE YAEZ VENEGAS

Pgina 7

BASE DE DATOS III

GUA DE LABORATORIO

PANEL SQL

Permite observar el cdigo en SQL del objeto seleccionado, como en el caso anterior observamos la base de datos test, donde podemos observar los comandos de su creacin. Este cdigo lo genera automticamente postgres por lo que no es posible editarlo. Para eso debemos utilizar la consola de Consultas.

ING. ENRIQUE YAEZ VENEGAS

Pgina 8

BASE DE DATOS III

GUA DE LABORATORIO

CONSOLA DE CONSULTAS
Se abre al hacer click en el botn de la barra de herramientas. NOTA: Este botn solo se habilitara si tenemos seleccionado un objeto por ejemplo una base de datos.

En esta seccin podemos escribir las consultas, en lenguaje SQL con algunas pequeas diferencias que iremos estudiando con el avance de los captulos

En esta seccin observamos los resultado de ejecutar las consultas, en el ejemplo en pantalla aadir una tabla a la base de datos Test

BARRA DE HERRAMIENTAS DE LA CONSOLA DE CONSULTAS


Tiene las funciones comunes abrir guardar cortar pegar etc. Botn para ejecutar las consultas Nos muestra la base de datos a la que estamos conectados; ej. Test.

ING. ENRIQUE YAEZ VENEGAS

Pgina 9

BASE DE DATOS III

GUA DE LABORATORIO

2.- MANEJO DE BASES DE DATOS


Para el manejo de bases de datos en PostgreSQL se tienen dos opciones: utilizar la interfaz grafica de pgAdmin III, o utilizar la lnea de comandos. Dentro de la interfaz grfica utilizaremos el panel de consultas SQL para desarrollar los diferentes comandos de manipulacin y creacin de las bases de datos.

C REAR UNA BASE DE DATOS .- PostgreSQL permite la creacin de cualquier nmero de base
de datos en un servidor, siendo el usuario que la crea automticamente el administrador de la base de datos. NOTA.- El nombre de la BD debe comenzar siempre con una letra y estar limitada a 32 caracteres. Para crear la base de datos se utiliza la sentencia: CREATE DATABASE [nombre_de_la_bd]; Ejemplos: CREATE DATABASE Nueva; CREATE DATABASE Empresa1; CREATE DATABASE BANCO; Otros comandos para el manejo de las bases de datos: DROP DATABASE Nueva; NOTA: El comando CREATE DATABASE nos permite el uso de ms opciones de configuracin como ser: CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ]

ING. ENRIQUE YAEZ VENEGAS

Pgina 10

BASE DE DATOS III

GUA DE LABORATORIO

3.- ESQUEMAS
Los esquemas contienen una coleccin de tablas, vistas, funciones y otros tipos de objetos, al interior de una base de datos. Nos permiten tener un mejor control al momento de establecer que contenidos son privados y cuales pblicos. Para crear un esquema se utiliza la sentencia: CREATE SCHEMA [nombre_del_esquema]; Ejemplos: CREATE SCHEMA Privado; CREATE SCHEMA Restringido; Tambin se pueden crear a travs de la interfaz grfica. Para adicionar una tabla a un esquema se utiliza: SET SEARCH_PATH TO [nombre_esquema], $usuario ; Ejemplo: SET SEARCH_PATH TO privado, $user ;

Podemos ver el esquema en el que estamos trabajando ejecutando el comando: SHOW SEARCH_PATH; NOTA: Por defecto el esquema en todas las bases de datos es public. Cuando trabajamos con muchos esquemas se puede acceder de forma rpida a ellos utilizando la notacin: nombre_esquema.nombre_tabla ej: SELECT * FROM privado.nueva;

ING. ENRIQUE YAEZ VENEGAS

Pgina 11

BASE DE DATOS III

GUA DE LABORATORIO

4.- TABLAS
Para crear la tabla se utiliza la sentencia: CREATE TABLE [nombre_tabla] (atributo1 tipo, atributo2 tipo,, atributoN tipo); Ejemplos: CREATE TABLE cliente(id_cliente INT PRIMARY KEY, nombre CHAR(10), ap_pat CHAR(10), ap_mat CHAR(10)); CREATE TABLE cuenta (id_cuenta INT, PRIMARY KEY, id_cliente INT, saldo FLOAT, fecha DATE, FOREIGN KEY(id_cliente) REFERENCES cliente(id_cliente) ); Otros comandos: ALTER, DROP, TEMPORARY. Ejemplos: ALTER TABLE cliente ADD COLUMN direccion CHAR(20); DROP TABLE cuenta;

TABLA TEMPORAL
Permite crear una tabla temporal dentro la base de datos ej: CREATE TEMPORARY TABLE cli_temp AS SELECT nombre, ap_pat FROM cliente; NOTA: En la interfaz grfica podemos ver el contenido de una tabla con click derecho seleccionando la opcin Ver Todas las Filas como se muestra en la figura.

ING. ENRIQUE YAEZ VENEGAS

Pgina 12

BASE DE DATOS III

GUA DE LABORATORIO

5.-DDL (DATA DEFINITION LANGUAGE)


Podemos distinguir los siguientes tipos de datos en Postgres: Tabla 4.1: Tipos de datos del estndar SQL3 en PostgreSQL

Tipos de datos del estndar SQL3 en PostgreSQL


Tipo en Postgres bool char(n) date float4/8 float8 int2 int4 int4 int4 money time timespan timestamp varchar(n) Correspondiente en SQL3 Descripcin

Boolean valor lgico o booleano (true/false) character(n) cadena de caracteres de tamao fijo Date fecha (sin hora) float(86#86) nmero de punto flotante con precisin 86#86 real, double precision nmero de punto flotante de doble precisin Smallint entero de dos bytes con signo int, integer entero de cuatro bytes con signo decimal(87#87) nmero exacto con 88#88 numeric(87#87) nmero exacto con 89#89 decimal(9,2) cantidad monetaria Time hora en horas, minutos, segundos y centsimas Interval intervalo de tiempo timestamp with time zone fecha y hora con zonificacin character varying(n) cadena de caracteres de tamao variable Fuente: Tipos de datos relevantes en PostgreSQL Tabla 4.2: Tipos de datos extendidos por PostgreSQL

Tipos de datos extendidos en PostgreSQL


Tipo box cidr circle inet int8 line lseg path point polygon serial Descripcin caja rectangular en el plano direccin de red o de host en IP versin 4 crculo en el plano direccin de red o de host en IP versin 4 entero de ocho bytes con signo lnea infinita en el plano segmento de lnea en el plano trayectoria geomtrica, abierta o cerrada, en el plano punto geomtrico en el plano trayectoria geomtrica cerrada en el plano identificador numrico nico Fuente: Tipos de datos relevantes en PostgreSQL 2

El listado completo se encuentra en el Anexo Tipos de Datos en Postgres o en la direccin indicada abajo. http://www.ibiblio.org/pub/linux/docs/LuCaS/Tutoriales/NOTAS-CURSO-BBDD/notas-cursoBD/node134.htm
2

ING. ENRIQUE YAEZ VENEGAS

Pgina 13

BASE DE DATOS III

GUA DE LABORATORIO

6.- DML (DATA MANIPULATION LANGUAGE)


Podemos realizar las operaciones que conocemos:

INSERT
La sentencia INSERT permite agregar datos a una tabla. La forma de INSERT es: INSERT INTO [nombre_tabla] VALUES (valor1, valor2,, valorN); Ejemplos: INSERT INTO cliente VALUES (0001,Juan, Perez, Pinto, Loa 100); INSERT INTO cuenta VALUES (0001,0010,4589.12); NOTA: Para ingresar valores reales se utiliza el punto ( . ) no as la coma ( , ).

SELECT
La sentencia SELECT permite obtener filas desde una tabla. La forma ms sencilla es: SELECT atributo1, atributo2,, atributoN FROM [nombre_tabla] WHERE atributo=valor; Ejemplos: SELECT nombre,ap_pat,ap_mat FROM cliente WHERE nombre=Juan; SELECT COUNT(*) FROM cliente;

UPDATE
UPDATE es la clusula que permite hacer modificaciones a registros ya existentes en la base de datos. Su forma ms sencilla es UPDATE [nombre_tabla] SET atributo1 = valor1, atributo2 = valor2,, atributoN = valorN WHERE atributo=valor; Ejemplo: UPDATE cliente SET ap_pat=Pinto, ap_mat=Perez WHERE id_cliente=0001; UPDATE cuenta SET saldo=0 WHERE id_cliente=0001;

ING. ENRIQUE YAEZ VENEGAS

Pgina 14

BASE DE DATOS III

GUA DE LABORATORIO

DELETE
DELETE es la clusula que permite eliminar registros de una tabla. Su uso es muy sencillo: DELETE FROM [nombre_tabla] WHERE atributo=valor {CASCADE | RESTRICT}; Ejemplos: DELETE FROM cliente WHERE id_cliente=0001 CASCADE; DELETE FROM cuenta WHERE id_cuenta=0010; NOTA: CASCADE permite eliminar registros an cuando estos estn relacionados con otras tablas.

ING. ENRIQUE YAEZ VENEGAS

Pgina 15

BASE DE DATOS III

GUA DE LABORATORIO

ADMINISTRACIN DE POSTGRESQL (2 PARTE)

ING. ENRIQUE YAEZ VENEGAS

Pgina 16

PRACTICA I

BASE DE DATOS III

GUA DE LABORATORIO

7.- ATRIBUTOS Y RESTRICCIONES


Postgres nos permite utilizar ciertos comandos para un mejor manejo de los datos. Entre ellos tenemos:

DEFAULT
DEFAULT Asigna un valor por defecto a un campo, por ejemplo: CREATE TABLE cliente (id_cliente INT, nit CHAR(11), nombre VARCHAR(40), telf INT DEFAULT 0 ); CREATE TABLE estudiante (id_estudiante INT, nombre CHAR(15), ap_pat CHAR(15), ap_mat CHAR(15), fecha_ins date DEFAULT CURRENT_DATE ); 3

CONSTRAINT
CONSTRAINT Es un tipo de restriccin que permite definir un conjunto de valores validos sobre una tabla, existen dos tipos: NOT NULL Obliga a que un campo contenga nicamente valores no nulos. Ejemplo: CREATE TABLE cliente ( id_cliente INT , nit INT, nombre VARCHAR(40) CONSTRAINT no_nulo NOT NULL, telf INT );

(1) 3 El manejo de los datos de tiempo esta incluido en el Anexo Manejo de Tiempo

ING. ENRIQUE YAEZ VENEGAS

Pgina 17

BASE DE DATOS III

GUA DE LABORATORIO

CREATE TABLE cuenta ( id_cuenta INT, id_cliente INT, saldo FLOAT, fecha_apertura date CONSTRAINT no_vacio NOT NULL ); UNIQUE Obliga a un grupo de uno o ms campos de una tabla a contener valores nicos. Ejemplo:

CREATE TABLE cliente ( id_cliente INT, documento_identidad CHAR(11) CONSTRAINT unico UNIQUE, nombre VARCHAR(40), telf INT ); CREATE TABLE producto( id_producto INT, nombre CHAR(11) CONSTRAINT unico UNIQUE, descripcion VARCHAR(40), precio FLOAT ); NOTA: No es necesario declarar CONSTRAINT para utilizar NOT NULL y UNIQUE por ejemplo se podra declarar: CREATE TABLE product (id_producto INT, nombre CHAR(11) UNIQUE, descripcion VARCHAR(40), precio FLOAT); Y tendra el mismo efecto que el caso anterior.

ING. ENRIQUE YAEZ VENEGAS

Pgina 18

BASE DE DATOS III

GUA DE LABORATORIO

CHECK
CHECK Es una restriccin sobre los valores permitidos en un campo: Ejemplo:

CREATE TABLE libros ( ISBN CHAR(11), titulo VARCHAR(40), autor VARCHAR(40), stock INT CHECK(stock>0) ); CREATE TABLE distribuidores ( did decimal(3), nonmbre vaCHAR(40) CONSTRAINT con1 CHECK (did > 100 AND nombre<> '') );

PRIMARY KEY Y FOREIGN KEY


PRIMARY KEY Obliga a que un campo contenga nicamente valores nicos y no nulos. Solo debe existir una clave primaria por tabla. Ejemplo:

CREATE TABLE cliente ( id_cliente INT PRIMARY KEY, documento_identidad CHAR(11) , nombre VARCHAR(40), telf INT ); NOTA: PRIMARY KEY contiene las restricciones UNIQUE y NOT NULL por lo tanto no es necesario agregarlas a las llaves primarias. FOREIGN KEY Clave ajena que proviene de otra tabla. Ejemplo:

CREATE TABLE cuenta ( id_cuenta INT PRIMARY KEY, id_cliente INT REFERENCES cliente(id_cliente) , saldo VARCHAR(40), fecha_apertura DATE );

ING. ENRIQUE YAEZ VENEGAS

Pgina 19

BASE DE DATOS III Tambin se puede utilizar de esta forma:

GUA DE LABORATORIO

CREATE TABLE cuenta ( id_cuenta INT PRIMARY KEY, id_cliente INT , saldo VARCHAR(40), fecha_apertura DATE, FOREIGN KEY id_cliente REFERENCES cliente(id_cliente) );

ING. ENRIQUE YAEZ VENEGAS

Pgina 20

BASE DE DATOS III

GUA DE LABORATORIO

8.- DOMINIOS
Un Dominio puede ser considerado como un tipo de dato y un Constraint, requiere de dos datos: el tipo base que utilizar el dominio, y la restriccin de limitacin para aceptar valores. Crear dominios Se utiliza el comando CREATE DOMAIN, y comprende tambin una serie de otras instrucciones como ser: CHECK, NOT NULL, DEFAULT, etc. CREATE DOMAIN [nombre] AS [tipo] (CONSTRAINT [nombre]) CHECK [condicion] Ejemplo: CREATE DOMAIN edad AS INT CONSTRAINT validar_edad CHECK((VALUE >0) AND (VALUE<99)); Eliminar un dominio Se utiliza la sentencia DROP DOMAIN. DROP DOMAIN edad CASCADE;

ING. ENRIQUE YAEZ VENEGAS

Pgina 21

BASE DE DATOS III

GUA DE LABORATORIO

9.- SECUENCIAS
Es un objeto de base de datos creado con el propsito de asignar nmeros nicos de entrada a una tabla, generalmente utilizados para generar claves primarias. Crear una secuencia Ejemplo: CREATE SEQUENCE correlativo INCREMENT 1 START 1000; Funciones de secuencia Nextval [nombre_seq] Para obtener el siguiente valor de la secuencia. Currval [nombre_seq] Determina el ultimo valor devuelto por la secuencia. Setval [nombre_seq, nuevo_val] Cambia el valor actual de la secuencia indicada.

Alterar una secuencia Ejemplo: ALTER SEQUENCE correlativo SET START 2000; Eliminar una secuencia Ejemplo: DROP SEQUENCE correlativo; Ejemplo de uso de secuencia: CREATE SEQUENCE cod_cuenta INCREMENT 1 START 2000; CREATE TABLE cuenta ( id_cuenta INT PRIMARY KEY DEFAULT netval(cod_cuenta,), id_cliente INT REFERENCES cliente(id_cliente) , saldo VARCHAR(40), fecha_apertura DATE ); NOTA: Cada vez que se utiliza Nextval la secuencia sube el incremento incluso cuando se ejecuta SELECT nextval(correlativo) por lo tanto se debe reasignar el valor correcto con setval.

ING. ENRIQUE YAEZ VENEGAS

Pgina 22

BASE DE DATOS III

GUA DE LABORATORIO

EJERCICIOS
1.- Crear el esquema privado donde debe estar incluida la tabla cliente y gerente 2.- Crear el dominio telefono que restrinja los datos entre 6400000 y 6499999 3.- Crear las siguientes tablas segn las especificaciones indicadas.

GERENTE
ATRIBUTO id_gerente nombre ap_pat ap_mat dir_gerente tel_gerente login pass TIPO int varchar(25) varchar(25) varchar(25) varchar(25) telefono * varchar(15) varchar(15) CONDICION PRIMARY KEY NOT NULL VALOR POR DEFECTO SECUENCIA(cod_ger) DESCRIPCION llave primaria datos personales datos personales datos personales datos personales datos personales nombre de usuario password

UNIQUE NOT NULL UNIQUE NOT NULL

CLIENTE
ATRIBUTO id_cliente nombre ap_pat ap_mat dir_cliente tel_cliente CI NIT TIPO int varchar(25) varchar(25) varchar(25) varchar(25) telefono * int int CONDICION PRIMARY KEY NOT NULL VALOR POR DEFECTO SECUENCIA(cod_cli) DESCRIPCION llave primaria datos personales datos personales datos personales datos personales datos personales datos personales password

NOT NULL UNIQUE NOT NULL UNIQUE NOT NULL

SUCURSAL
ATRIBUTO id_sucursal CONDICION int PRIMARY KEY ciudad_sucursal varchar(15) NOT NULL dir_sucursal varchar(25) NOT NULL tel_sucursal telefono* capital_disp float id_gerente int FOREIGN KEY TIPO VALOR POR DEFECTO SECUENCIA(cod_suc) DESCRIPCION llave primaria datos sucursal datos sucursal datos sucursal dinero disponible llave gerente

> 6400000 y < 650000

ING. ENRIQUE YAEZ VENEGAS

Pgina 23

BASE DE DATOS III

GUA DE LABORATORIO

CUENTA
ATRIBUTO id_cuenta id_sucursal id_cliente saldo TIPO int int int float CONDICION PRIMARY KEY FOREIGN KEY FOREIGN KEY NO NEGATIVA MAYOR A 0,5 MENOR A 4 VALOR POR DEFECTO SECUENCIA(cod_cue) DESCRIPCION llave primaria llave sucursal llave cliente saldo de la cuenta
inters por la cuenta en porcentaje

interes_mensual float fecha_apertura fecha_ult_mod datetime datetime

CURRENT_TIME

fecha del prstamo cambio en la cuenta

PRESTAMO
ATRIBUTO id_prestamo id_sucursal id_cliente monto_pres interes fecha_pres periodo_int int int int float float datetime datetime TIPO CONDICION PRIMARY KEY FOREIGN KEY FOREIGN KEY NO NEGATIVA MAYOR A 0,5 MENOR A 4 VALOR POR DESCRIPCION DEFECTO SECUENCIA(cod_pre) llave primaria llave sucursal llave cliente monto prestado
inters por el prstamo en porcentaje

CURRENT_TIME

fecha del prstamo


periodo cuando se incrementa el inters al prstamo

CLIENTE_CUENTA
ATRIBUTO id_cliente id_cuenta TIPO int int CONDICION PRIMARY KEY FOREIGN KEY PRIMARY KEY FOREIGN KEY VALOR POR DEFECTO DESCRIPCION

CLIENTE_PRESTAMO
ATRIBUTO id_cliente id_prestamo TIPO CONDICION int PRIMARY KEY FOREIGN KEY int PRIMARY KEY FOREIGN KEY VALOR POR DEFECTO DESCRIPCION

ING. ENRIQUE YAEZ VENEGAS

Pgina 24

BASE DE DATOS III

GUA DE LABORATORIO

4.- Insertar 1 gerente, 6 sucursales, 25 clientes 15 cuentas y 10 prestamos 5.- Verificar el resultado de insertar una cuenta con saldo negativo, un inters de 5% 6.- Crear la tabla temporal cliente-cuenta y mostrar los datos personales del cliente y su saldo.

ING. ENRIQUE YAEZ VENEGAS

Pgina 25

BASE DE DATOS III

GUA DE LABORATORIO

FUNCIONES Y CURSORES

ING. ENRIQUE YAEZ VENEGAS

Pgina 26

PRACTICA II

BASE DE DATOS III

GUA DE LABORATORIO

A LIAS
Para una mejor legibilidad del cdigo, es posible denir un alias para un parmetro posicional de una funcin. Estos alias son necesarios cuando un tipo compuesto se pasa como argumento a una funcin. La notacin punto $1.salary como en funciones SQL no se permiten en PL/pgSQL. Ej.: nombre ALIAS FOR $n;

V ARIABLES PASADAS A LAS FUNCIONES


Las variables que se pasan a las funciones son denominadas con los identificadores $1, $2, etc. (el mximo es 16). Algunos ejemplos: CREATE FUNCTION iva_venta(REAL) RETURNS REAL AS DECLARE subtotal ALIAS FOR $1; BEGIN return subtotal * 0.16; END; LANGUAGE plpgsql; CREATE FUNCTION instr(VARCHAR,INTEGER) RETURNS INTEGER AS DECLARE v_string ALIAS FOR $1; index ALIAS FOR $2; BEGIN -- A LGUNOS CCULOS IRAN AQU . END; LANGUAGE plpgsql;

F UNCIONES
Una funcin devuelve un valor como resultado de su ejecucin: Para crear una funcin se tiene la siguiente sintaxis: CREATE OR REPLACE FUNCTION [nombre_funcion] (tipo1 nombre1,, tipoN nombreN) RETURNS tipo_resultado AS BEGIN sentencia; END; LANGUAGE plpgsql;

ING. ENRIQUE YAEZ VENEGAS

Pgina 27

BASE DE DATOS III

GUA DE LABORATORIO

Para eliminar una funcin se utiliza el comando DROP FUNCTION. CREATE FUNCTION suma_uno (int4) RETURNS int4 AS BEGIN RETURN $1 + 1; END; LANGUAGE plpgsql; -- FUNCION PARA SUMAR 1 + 1

CREATE FUNCTION concat_texto (text, text) RETURNS text AS BEGIN RETURN $1 || $2; END; LANGUAGE plpgsql;

-- FUNCION PARA -- CONCATENAR TEXTO

CREATE FUNCTION excedente_sueldo (EMP, int4) RETURNS bool AS --FUNCION QUE DECLARE -- COMPRUEBA SI emp_reg ALIAS FOR $1; -- EL SALARIO DE UN sal_lim ALIAS FOR $2; -- EMPLEADO ES BEGIN -- SUPERIOR A UN IF emp_reg.salary ISNULL THEN -- LIMITE RETURN f; END IF; RETURN emp_reg.salario > sal_lim; END; LANGUAGE plpgsql; NOTA: En la ltima funcin se enva un registro EMP que corresponde a la seleccin SELECT * FROM EMPLEADO WHERE id=id_buscado.

ING. ENRIQUE YAEZ VENEGAS

Pgina 28

BASE DE DATOS III

GUA DE LABORATORIO

C URSORES
Son tablas temporales que permiten ejecutar grandes consultas. Son soportados dentro de las funciones, como un SQL embebido. Los cursores pueden o no hacer copias de sus resultados y sus resultados son de solo lectura. Utilizan los siguientes comandos: BEGIN.- Para indicar el comienzo de la operacin. DECLARE.- Define un cursor para acceso a una tabla. FETCH.- Permite devolver las filas usando un cursor. El numero de filas devueltas es especificado por un nmero (#), este puede ser reemplazado por ALL que har que se devuelvan todas las filas del cursor. Tambin se pueden utilizar los comandos BACKWARD y FORWARD para indicar la direccin. CLOSE.- Libera los recursos del cursor abierto. COMMIT.- Realiza la transaccin actual. END.- Es un sinnimo en PostgreSQL de COMMIT. Realiza la transaccin actual. ROLLBACK.- Deshace la transaccin actual y provoca que todas las modificaciones originadas por la misma sean descartadas. EJEMPLO: BEING WORK; DECLARE capital_1 CURSOR FOR SELECT * FROM sucursal WHERE capital<20000; -- CREA EL CURSOR FETCH FORWARD 2 IN capital_1; -- RECORRE ADELANTE DOS POSICIONES FETCH BACKWARD 1 IN capital_1; -- RECORRE ATRAS UNA POSICION CLOSE capital_1; -- CIERRA EL CURSOR COMMIT WORK; -- TERMINA LA TRANSACCION

ING. ENRIQUE YAEZ VENEGAS

Pgina 29

BASE DE DATOS III

GUA DE LABORATORIO

EJERCICIOS
Utilizando la base de datos BANCO realizar los siguientes ejercicios: 1.- Crear una funcin que devuelva el inters ganado de una cuenta. (Saldo*interes_mesual) 2.- Crear una funcin que devuelva el mayor prstamo realizado a un cliente. 3.- Crear una funcin para devolver la cantidad total de prestamos de una sucursal 4.- Crear un cursor que contenga los prstamos realizados en el ltimo mes y mostrar los 2 ltimos. 5.- Crear un cursor con los clientes de Sucre y mostrar los 3 primeros.

ING. ENRIQUE YAEZ VENEGAS

Pgina 30

BASE DE DATOS III

GUA DE LABORATORIO

PL/PGSQL (1 PARTE)

ING. ENRIQUE YAEZ VENEGAS

Pgina 31

PRACTICA III

BASE DE DATOS III

GUA DE LABORATORIO

1. INTRODUCCIN
Es comn que los desarrolladores de aplicaciones subutilicen las prestaciones de las bases de datos relacionales modernas, en ocasiones implemente por desconocer las ventajas que le ofrecen o por desconocer su manejo. Dentro de PostgreSQL, la base de datos de cdigo abierto ms poderosa, se pueden desarrollar funciones en varios lenguajes. El lenguaje PL/pgSQL es uno de los ms utilizados dentro de PostgreSQL, debido a que guarda cierta similitud con PL/SQL de Oracle y a su facilidad de uso. En este tutorial se mostrar la sintaxis, el control de flujo y otras caractersticas del lenguaje, adems de presentarn algunos ejemplos reales.(3)

V ENTAJAS DE USAR PL/ PG SQL


SQL es el lenguaje estndar para realizar consultas a un servidor de base de datos. Cada sentencia SQL se ejecuta de manera individual por el servidor, lo cual implica que las aplicaciones cliente deben enviar cada consulta al servidor, esperar a que la procese, recibir los resultados, procesar los datos y despus enviar la siguiente sentencia. Al usar PL/pgSQL es posible realizar clculos, manejo de cadenas y consultas dentro del servidor de la base de datos, combinando el poder de un lenguaje procedimental y la facilidad de uso de SQL, minimizando el tiempo de conexin entre el cliente y el servidor.4

Programacin de funciones en PL/pgSQL para PostgreSQL Roberto Andrade Fonseca. ABL Consultores, S.A. de C.V.
4

ING. ENRIQUE YAEZ VENEGAS

Pgina 32

BASE DE DATOS III

GUA DE LABORATORIO

2. ESTRUCTURA DE PL/PGSQL
Estructura de PL / PsSQL Es un lenguaje estructurado a base de bloques. La sintaxis de cada bloque esta definida de la siguiente manera: [ <<label>> ] [ DECLARE declaraciones ] BEGIN sentencias END; Pueden existir varios bloques o sub-bloques en la seccin de sentencias de un bloque. Los subbloques pueden ser usados para ocultar las variables a los bloques ms externos. Normalmente una de las sentencias es el valor de retorno, usando la palabra clave RETURN. Las variables declaradas en la seccin que antecede a un bloque se inicializan a su valor por omisin cada vez que se entra al bloque, no solamente al ser llamada la funcin. Por ejemplo: CREATE FUNCTION funcion() RETURNS INTEGER AS DECLARE cantidad INTEGER := 30; BEGIN RAISE NOTICE Cantidad contiene aqu %, cantidad; -- Cantidad contiene aqu 30 cantidad := 50; -- Creamos un sub-bloque DECLARE cantidad INTEGER := 80; Sub-bloque BEGIN RAISE NOTICE Cantidad contiene aqu %, cantidad; -- Cantidad contiene aqu 80 END; RAISE NOTICE Cantidad contiene aqu %, cantidad; -- Cantidad contiene aqu 50 RETURN cantidad; END; LANGUAGE plpgsql; VARIABLES Y ASIGNACIN DE VALORES

Bloque 1

2.1. C OMENTARIOS , CONSTANTES ,

ING. ENRIQUE YAEZ VENEGAS

Pgina 33

BASE DE DATOS III

GUA DE LABORATORIO

2.1.1 C OMENTARIOS
Existen dos tipo de comentarios en PL/pgSQL. Un doble guin da inicio a un comentario, el cual se extiende hasta el final de la lnea. Un /* inicia un bloque que se extiende hasta la primera ocurrencia de */. ESTE ES UN COMENTARIO DE UNA LINEA /* ESTE ES UN COMENTARIO DE MAS DE UNA LINEA */

2.1.2 V ARIABLES Y

CONSTANTES

Todas las variables, filas y registros usados en un bloque o en sus sub-bloques deben declararse en la seccin de declaraciones del bloque. La excepcin es la variable de un ciclo FOR que itera sobre un rango de valores enteros. Las variables en PL/pgSQL pueden ser de cualquier tipo de datos de SQL, como INTEGER, VARCHAR y CHAR. El valor por omisin de todas las variables es el valor NULL de SQL. A continuacin se muestran algunos ejemplos de declaracin de variables: Id_usuario INTEGER; cantidad INTEGER; url VARCHAR;

2.1.3 A SIGNACIN DE VALORES


Para la asignacin de valores a las variables se utiliza := como se muestra a continuacin: id_usuario CONSTANT INTEGER := 10; ASIGNACION DE UNA CONSTANTE cantidad INTEGER := 32; url VARCHAR := http://misitio.com;

ING. ENRIQUE YAEZ VENEGAS

Pgina 34

BASE DE DATOS III

GUA DE LABORATORIO

2.2. E STRUCTURAS DE CONTROL DE FLUJO 2.2.1. C ONDICIONES


IF condicin THEN sentencias [ELSE sentencias] END IF; condicin debe devolver un valor que al menos pueda ser adaptado en un tipo booleano.

2.2.2. B UCLES
Hay varios tipos de bucles. [<<etiqueta>>] LOOP sentencias END LOOP; Se trata de un bucle no condicional que ha de ser terminado de forma explicita, mediante una sentencia EXIT. La etiqueta opcional puede ser usada por las sentencias EXIT de otros bucles anidados, para especificar el nivel del bucle que ha de terminarse. [<<etiqueta>>] WHILE condicin LOOP sentencias END LOOP; Se trata de un lazo condicional que se ejecuta mientras la evaluacin de condicin sea cierta. [<<etiqueta>>] FOR nombre_variable IN [ REVERSE ] condicin LOOP sentencias END LOOP; Se trata de un bucle que se itera sobre un rango de valores enteros. La variable nombre_variable se crea automticamente con el tipo entero, y existe solo dentro del bucle. Las dos expresiones dan el lmite inferior y superior del rango y son evaluados slo cuando se entra en el bucle. El paso de la iteracin es siempre 1.

ING. ENRIQUE YAEZ VENEGAS

Pgina 35

BASE DE DATOS III [<<etiquetas>>] FOR registro | fila IN clausula_select LOOP sentencias END LOOP;

GUA DE LABORATORIO

El registro o fila se asigna a todas las filas resultantes de la clausula de seleccin, y la sentencia se ejecuta para cada una de ellas. Si el bucle se termina con una sentencia EXIT, la ltima fila asignada es an accesible despus del bucle. EXIT [ etiqueta ] [ WHEN condicin ]; Si no se incluye etiqueta, se termina el lazo ms interno, y se ejecuta la sentencia que sigue a END LOOP. Si se incluye etiqueta ha de ser la etiqueta del bucle actual u de otro de mayor nivel. EL bucle indicado se termina, y el control se pasa a la sentencia de despus del END del bucle o bloque correspondiente.

ING. ENRIQUE YAEZ VENEGAS

Pgina 36

BASE DE DATOS III

GUA DE LABORATORIO

EJERCICIOS
Utilizando la base de datos BANCO realizar los siguientes ejercicios: 1.- Crear una funcin en PL/pgSQL que devuelva cuantos clientes tienen una cuenta superior a 5000 2.- Crear una funcin que en PL/pgSQL que devuelva cuantos clientes tienen una cuenta creada por lo menos hace un ao

ING. ENRIQUE YAEZ VENEGAS

Pgina 37

BASE DE DATOS III

GUA DE LABORATORIO

PL/PGSQL (2 PARTE)

ING. ENRIQUE YAEZ VENEGAS

Pgina 38

PRACTICA IV

BASE DE DATOS III

GUA DE LABORATORIO

S ENTENCIAS
Cualquier cosa no comprendida por el analizador PL/pgSQL tal como se especifica adelante ser enviada al gestor de la base de datos, para su ejecucin. La consulta resultante no devolver ningn dato.

A SIGNACIN DE UNA SELECCIN COMPLETA


Una asignacin de una seleccin completa en un registro o fila puede hacerse del siguiente modo: SELECT expresion INTO destino FROM ...; destino puede ser un registro, una variable de fila o una lista separada por comas de variables y campo de de registros o filas.Ej: SELECT COUNT(empleados) INTO cant_emp FROM EMPLEADOS; SELECT EMPLEADO.all INTO empleados_jovenes FROM EMPLEADOS WHERE (edad<35); Si una fila o una lista de variables se usan como objetivo, los valores seleccionados han de coincidir exactamente con la estructura de los objetivos o se producir un error de ejecucin. La palabra clave FROM puede preceder a cualquier calificador vlido, agrupacin, ordenacin, etc. que pueda pasarse a una sentencia SELECT. Existe una variable especial llamada FOUND de tipo booleano, que puede usarse inmediatamente despus de SELECT INTO para comprobar si una asignacin ha tenido xito. SELECT * INTO registro FROM EMP WHERE empnombre = nombre; IF NOT FOUND THEN RAISE EXCEPTION empleado % no encontrado, nombre; END IF; Si la seleccin devuelve mltiples filas, solo la primera se mueve a los campos objetivo; todas las dems se descartan.

A TRIBUTOS
Usando los atributos %TYPE y %ROWTYPE, es posible declarar variables con el mismo tipo de dato o estructura de otro item de la base de datos (por ejemplo, un campo de una tabla). %TYPE Proporciona el tipo de dato de una variable o una columna. Se puede utilizar para declarar variables que almacenen valores de bases de datos. Por ejemplo, supongamos que se tiene una columna llamada id_usuario en la tabla usuarios. Para declarar una variable con el mismo tipo de dato que el usado en nuestra tabla de usuarios, lo que se hara es: id_usuario usuarios.id_usuario\%TYPE;

ING. ENRIQUE YAEZ VENEGAS

Pgina 39

BASE DE DATOS III TABLA USUARIO id_usario TIPO INT PL/PGSQL

GUA DE LABORATORIO TIPO INT

id_usuario usuarios.id_usuario\%TYPE

Al usar %TYPE no importan los cambios que se realicen en la definicin de los datos de una tabla siempre obtendremos el tipo del valor al que hacemos referencia. nombre T_tabla%ROWTYPE Declara una rengln con la estructura de la tabla especificada. T_tabla puede ser una tabla o una vista que exista en la base de datos. Los campos del rengln se accedan con la notacin punto. Los parmetros de una funcin pueden ser de tipo compuesto (renglones completos de una tabla). Es este caso, el identificador correspondiente $n ser del tipo rowtype, pero debe usarse un seudnimo o alias usando el comando ALIAS . Solamente los atributos del usuario de la tabla pueden ser accesibles en el rengln, ni los OID ni otros atributos del sistema (debido a que el rengln puede ser de una vista). Los campos de un rowtype heredan los tamaos de los campos o la precisin de los tipos de dato para char(), etc.

ING. ENRIQUE YAEZ VENEGAS

Pgina 40

BASE DE DATOS III

GUA DE LABORATORIO

VISTAS Y REGLAS

ING. ENRIQUE YAEZ VENEGAS

Pgina 41

PRACTICA V

BASE DE DATOS III

GUA DE LABORATORIO

CONCEPTOS Y DEFINICION DE VISTA.


Los usuarios que acceden a una base de datos relacional, lo hacen tpicamente a travs de vistas, de modo que diferentes usuarios tienen diferentes vistas. Una vista, en s, es una tabla virtual derivada, con nombre. El trmino virtual significa que la tabla no existe como tal, pero para el usuario si parece existir. Por el contrario una tabla es real, en el sentido que existe y est almacenada en algn dispositivo fsico de almacenamiento. Las vistas no se sustentan en datos almacenados fsicamente, solo se almacena su definicin en el catlogo de sistema, y esta construida en base a otras tablas. Las vistas tienen la misma estructura que una tabla: filas y columnas. Los datos se recuperan mediante una consulta SELECT y se presentarn igual que los de una tabla.

D EFINICIN DE VISTA EN P OSTGRE SQL.


Una vista es una relacin virtual cuya extensin se deriva de las relaciones bsicas de la base de datos, es decir, por medio de sentencias SELECT. La sintaxis de definicin de una vista en SQL es: CREATE [OR REPLACE] VIEW <nombre_de_vista> AS sentencia_SELECT campos1 [, campo2, ... , campoN ] FROM tabla1 [, tabla2, ... , tablaN ] [ WHERE condiciones_de_consulta ] [ ORDER BY lista_de_campos ] [ GROUP BY lista_de_campos ] Ejemplo: CREATE VIEW cliente_apellido AS SELECT * FROM clientes WHERE ap_paterno LIKE A% Las vistas en PostgreSQL no son actualizables, es decir, si bien es cierto, son tratadas como tablas, no es posible hacer INSERT, DELETE ni UPDATE sobre las vistas, esta desventaja es una caracterstica particular en PostgreSQL dado que esta cualidad si esta disponible en otros motores de bases de datos como ORACLE, Informix y SQL Server, sin embargo cabe notar que PostgreSQL cubre esta falencia en las vistas con la creacin de reglas (CREATE RULE) que permite llenar el vaco dejado por la vista.

ING. ENRIQUE YAEZ VENEGAS

Pgina 42

BASE DE DATOS III

GUA DE LABORATORIO

ELIMINAR VISTAS.
Si en algn caso, se necesita modificar una vista, deber eliminarla primero y luego volverla a crear, de forma similar si tambin necesitas eliminar una vista de la base de datos, la sentencia es la siguiente: DROP VIEW <nombre_de_la_vista>

ING. ENRIQUE YAEZ VENEGAS

Pgina 43

BASE DE DATOS III

GUA DE LABORATORIO

REGLAS R EGLAS SOBRE INSERT, UPDATE Y DELETE


Las reglas en PostgreSQL permiten realizar las siguientes acciones: Pueden no tener accin. Pueden tener mltiples acciones. La palabra clave INSTEAD es opcional. Las pseudo-relaciones NEW y OLD se vuelven utilizables. Puede haber cualicaciones a las reglas.

Su sintaxis es la siguiente: CREATE RULE nombre_regla AS ON event TO objeto [WHERE condicin] DO [INSTEAD] [accion | (acciones) | NOTHING]; Ejemplos: CREATE RULE suc_ins_protec AS ON INSERT TO vista_sucursal DO INSTEAD NOTHING; CREATE RULE suc_ins AS ON INSERT TO sucursal_vista DO INSTEAD INSERT INTO sucursal VALUES ( NEW.sucursal.nombre, NEW.sucursal. ciudad, NEW.sucursal.direccion, NEW.sucursal.telefono, NEW.sucursal.capital);

ING. ENRIQUE YAEZ VENEGAS

Pgina 44

BASE DE DATOS III

GUA DE LABORATORIO

EJERCICIOS
1.- Crear una vista para los Clientes por ciudad 2.- Crear una vista con todos los datos de las sucursales 3.- Crear una vista con los clientes y sus cuentas 4.- Crear una vista con los clientes y sus prstamos 5.- Crear reglas para que no se puedan insertar datos en las vistas

ING. ENRIQUE YAEZ VENEGAS

Pgina 45

BASE DE DATOS III

GUA DE LABORATORIO

FUNCIONES TRIGGER Y TRIGGERS

ING. ENRIQUE YAEZ VENEGAS

Pgina 46

PRACTICA VI

BASE DE DATOS III

GUA DE LABORATORIO

F UNCIONES TRIGGER
Tienen las siguientes caractersticas: No tienen argumentos. Tienen acceso a los constructores especiales NEW y OLD. El tipo de valor de retorno de una funcin trigger, debera ser de tipo trigger.

Ejemplo:

CREATE OR REPLACE FUNCTION actual() RETURNS trigger AS $$ BEGIN NEW.fecha_prestamo=now(); RETURN NEW; END; $$LANGUAGE plpgsql;

A LTERAR Y E LIMINAR UN TRIGGER


ALTER TRIGGER permite modificar un trigger, DROP TRIGGER borrara todas las referencias que existan a la definicin de un disparador.

ING. ENRIQUE YAEZ VENEGAS

Pgina 47

BASE DE DATOS III

GUA DE LABORATORIO

TRIGGERS
Un trigger define una accin basada en una ocurrencia especfica en una base de datos. En PostgreSQL , esto significa la ejecucin de un procedimiento almacenado, basado en acciones repetidas en una tabla especfica. Los triggers son definidos por seis caractersticas: El nombre del trigger. El Tiempo en el cual se debe inicializar el trigger. El evento en el cual se disparara el trigger. La tabla en la cual se disparar el trigger. La frecuencia de ejecucin. La funcin que debera ser llamada.

CREACIN DE TRIGGERS
CREATE TRIGGER, crea un nuevo disparador en la base de datos actual. Sintaxis: CREATE TRIGGER nombre_trigger {BEFORE|AFTER} {EVENT[OR]} ON table [FOR [EACH]{ROW|STATEMENT}] EXECUTE PROCEDURE nombre_funcin{argumentos} Donde: BEFORE El trigger se ejecuta antes de que la operacin sea realizada. AFTER El trigger se ejecuta despus de que la operacin haya sido realizada. EVENT Especifica el tipo de consulta que va a ejecutar el trigger, puede ser DELETE, INSERT o UPDATE. ON TABLE Indica la tabla donde se ejecutara el trigger. FOR EACH Define la frecuencia en con la cual es llamada la ejecucin de la funcin. EXECUTE PROCEDURE Define el procedimiento que va a ser ejecutado por el trigger.

Ejemplo: CREATE TRIGGER emp_sueldo BEFORE INSERT OR UPDATE ON empleado FOR EACH ROW EXECUTE PROCEDURE emp_sueldo(); NOTA: La funcin utilizada en el trigger deber ser declarada antes del Trigger, en el ejmplo la funcin emp_sueldo()

ING. ENRIQUE YAEZ VENEGAS

Pgina 48

BASE DE DATOS III

GUA DE LABORATORIO

EJERCICIOS
Utilizando la base de datos BANCO realizar los siguientes ejercicios: 1.- Crear un trigger que controle que el capital no sea menor a 1000. 2.- Crear un trigger que controle que el saldo de un cliente sea menor a 100. 3.- Crear un trigger que controle que ningn cliente saque un prstamo mayor al capital de la sucursal. 4.- Crear un Trigger para calcular automticamente el inters de un prstamo al concluir el periodo de clculo de inters.

ING. ENRIQUE YAEZ VENEGAS

Pgina 49

BASE DE DATOS III

GUA DE LABORATORIO

ANEXO 1 TIPOS DE DATOS DE POSTGRES

ING. ENRIQUE YAEZ VENEGAS

Pgina 50

BASE DE DATOS III Tipo SET abstime aclitem bool box bpchar bytea char cid cidr circle date datetime filename float4 float8 inet int2 int28 int4 int8 line lseg macaddr money name numeric oid oid8 path point polygon regproc reltime smgr text tid Descripcin

GUA DE LABORATORIO

conjunto de tuplas fecha y hora absoluta de rango limitado (Unix system time) lista de control de acceso booleano 'true'/'false' rectngulo geomtrico '(izquierda abajo, derecha arriba)' caracteres rellenos con espacios, longitud especificada al momento de creacin arreglo de bytes de longitud variable un slo carcter command identifier type, identificador de secuencia en transacciones direccin de red crculo geomtrico '(centro, radio)' fecha ANSI SQL 'aaaa-mm-dd' fecha y hora 'aaaa-mm-dd hh:mm:ss' nombre de archivo usado en tablas del sistema nmero real de precisin simple de 4 bytes nmero real de precisin doble de 8 bytes direccin de red nmero entero de dos bytes, de -32k a 32k 8 nmeros enteros de 2 bytes, usado internamente nmero entero de 4 bytes, -2B to 2B nmero entero de 8 bytes, 90#9018 dgitos lnea geomtrica '(pt1, pt2)' segmento de lnea geomtrica '(pt1, pt2)' direccin MAC unidad monetaria '$d,ddd.cc' tipo de 31 caracteres para guardar identificadores del sistema nmero de precisin mltiple tipo de identificacin de objetos arreglo de 8 oids, utilizado en tablas del sistema trayectoria geomtrica '(pt1, ...)' punto geomtrico '(x, y)' polgono geomtrico '(pt1, ...)' procedimiento registrado intervalo de tiempo de rango limitado y relativo (Unix delta time) manejador de almacenamiento (storage manager) cadena de caracteres nativa de longitud variable tipo de identificador de tupla, localizacin fsica de tupla

ING. ENRIQUE YAEZ VENEGAS

Pgina 51

BASE DE DATOS III Tipo time timespan timestamp tinterval unknown varchar Descripcin

GUA DE LABORATORIO

hora ANSI SQL 'hh:mm:ss' intervalo de tiempo '@ <number> <units>' fecha y hora en formato ISO de rango limitado intervalo de tiempo '(abstime, abstime)' tipo desconocido cadena de caracteres sin espacios al final, longitud especificada al momento de creacin

ING. ENRIQUE YAEZ VENEGAS

Pgina 52

BASE DE DATOS III

GUA DE LABORATORIO

ANEXO 2 - MANEJO DE DATOS TEMPORALES EN POSTGRES

ING. ENRIQUE YAEZ VENEGAS

Pgina 53

BASE DE DATOS III

GUA DE LABORATORIO

OBTENER LA FECHA Y HORA ACTUAL


SELECT CURRENT_TIMESTAMP; SELECT now(); SELECT TIMESTAMP 'now'; SELECT timeofday(); Resultado: Sat Feb 17 19:07:32.000126 2010 EST

SELECT CURRENT_TIME; Resultado: 14:39:53.662522-05 SELECT CURRENT_DATE; 2010-10-23

SELECCIONAR UN CAMPO ESPECFICO DE UNA FECHA


OBTENER EL DA SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); Resultado: 16 OBTENER EL MES SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); Resultado: 02 OBTENER EL AO SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); Resultado: 2001

Fuente: http://www.postgresql.org/docs/7.3/static/functions-datetime.html

ING. ENRIQUE YAEZ VENEGAS

Pgina 54

You might also like