Manual
Postgres
Crear: base de datos, tablas
y triggers o disparadores
Realizado por: Alyeli Sojo
Sección: 7001
10 trimestre, 4 trayecto
PNFI
IUTOMS - 26/04/2012
Índice pág.
Crear base de datos………………………………………………………………………………………………………….…………….1
Crear tablas…………………………………………………………………………………………………………………………………….2
Disparadores o Triggers………………………………………………………………………………………………………………..12
CREAR BASE DE DATOS
Damos clic derecho con el mouse
sobre base de datos, y
seleccionamos crear “Nueva
Base de Datos”.
A continuación mostrara la siguiente pantalla:
Luego le colocamos el nombre
de la base de datos.
Presionamos el botón ok. (Listo
se ha creado la base de datos).
1
Luego de haber creado la base de datos.
Se procede a la estructura de la base de datos, se abre el Esquema, el public.
CREAR TABLAS
Damos clic derecho con el mouse
sobre Tablas(), y seleccionamos
crear “Nueva Tabla”.
+TABLA “materias”
Se muestra la siguiente Ventana, para crear una nueva tabla, a continuación se muestra la
pestaña propiedades:
Pestaña: propiedades
Colocamos el nombre a la tabla,
en este caso “materias”.
2
Para agregar las columnas a la tabla, se debe ingresar a la pestaña columnas:
Colocamos el nombre del
campo de la tabla “materias”
Seleccionamos el tipo de dato
a insertar según campo. En
este caso “integer”, es decir,
Pestaña: columnas el campo es de tipo numérico,
solo números.
Presionamos el botón
añadir para agregar un Presionamos el botón
campo a la tabla materias. ok. (Listo se ha creado el
campo “cod_materia”).
A continuación añadimos otro campo a la tabla “materias”:
Colocamos el nombre del
campo de la tabla “materias”
Seleccionamos el tipo de dato
a insertar según campo. En
este caso “charater varying”,
es decir, el campo es de tipo
caracteres.
Colocamos la longitud que debe llevar este campo tipo carácter,
en este caso “255”
Presionamos el botón ok. (Listo se ha
creado el campo “nombremateria”).
3
Además las tablas deben tener una Clave primaria (se debe ingresar a la tabla “Restricciones” de
la tabla “materias” que se esta creando en “Nueva tabla…”):
Pestaña: Restricciones
Pestaña: Columnas
Una vez creados los
campos de la tabla, se
selecciona el campo,
Se le da clic en que será la clave
primaria de la tabla Se le da clic a “añadir”, la
añadir (para añadir
que estamos creando. clave primaria.
la clave primaria
Se selecciona clave
primaria
Pestaña: Propiedades
Se coloca el nombre del
campo de la clave primaria
Presionamos el botón ok. (Listo se ha
creado la clave primaria )
4
Presionamos el botón
ok. (Listo se ha creado
la tabla “materias”
con sus respectivos
campos)
+TABLA “profesores”
Pestaña: Propiedades
Pestaña: Columnas
Nombramos la nueva tabla
“profesores”
Se le da clic al botón “Añadir”
(para agregar columna)
Nombre del
campo de la
tabla
profesores
Nombre del
Tipo de dato Tipo de dato “nombre”
campo de la
“integer” (q tabla “carácter vaying” (q
Se ingresa la
acepta solo profesores acepta solo letras,
longitud del
números). “cedula” números, símbolos).
charácter “255”
5
Nombre del campo de la
tabla profesores “apellido”
Tipo de dato “carácter
vaying” (q acepta solo
Campos o
letras, números, símbolos).
columnas
creadas en la
Se ingresa la longitud del charácter tabla
“255” “profesores”
Se da clic en el botón “ok” (para
crear la columna de dicha tabla).
En el misma ventana “Nueva Tabla…” en la pestaña restricciones se crea la clave primaria, se le
da clic al botón “Añadir” y se muestra lo siguiente:
Pestaña: Propiedades
Pestaña: Columnas
Nombre de la clave
primaria de la tabla
“profesores”
Se selecciona el campo creado
(“cedula”), q será la clave primaria
de la tabla “profesores” y se da clic
en el botón “Añadir”.
6
Se ha creado la clave
primaria, en la tabla
“profesores”
Se le da clic en “ok”, para crear la
tabla “profesores”
+TABLA departamentos
Se agrega el Nombre de la
tabla “departamentos” Nombre del campo de
la tabla
departamentos
“cod_departamento”
Tipo de dato “integer” (q
acepta solo números).
En la ventana “Nueva Tabla…”, seleccionamos la pestaña Columnas, se le da clic al botón
“Añadir” y se mostrara la ventana “Nueva Colummna”.
Nombre del campo de Nombre del campo de
la tabla la tabla
departamentos departamentos
“code_materia” “cedula_prof”
Tipo de dato “integer” (q Tipo de dato “integer” (q
acepta solo números). acepta solo números).
En el misma ventana “Nueva Tabla…” en la pestaña restricciones se crea la clave primaria, se le
da clic al botón “Añadir” y se muestra lo siguiente:
Pestaña: Propiedades
Pestaña: Columnas
Nombre de la clave
primaria de la tabla
“profesores” Se selecciona el campo creado
(“cedula”), q será la clave primaria
de la tabla “departamentos” y se
da clic en el botón “Añadir”.
8
La tabla “departamentos” esta relacionado con las claves primarias de las tablas “materias” y
“profesores” con sus claves primarias, a continuación se relacionan cada campo clave ajena o
clave fk con las respectivas claves primarias de las otras tablas: En la misma ventana “Nueva
Tabla…” se en la pestaña “References” se le da clic a “Añadir”, se visualiza al lado que dice clave
ajena(clave fk):
Se selecciona el campo de referencias de la tabla
“departamentos” (que seria la columna o campo local).
De la taba q se esta relacionando con las demás tablas.
Se selecciona la tabla
“materias” que se
Se selecciona el campo de referencias
relacionara con la
Se ingresa el nombre de la tabla “materias”
tabla
de la clave ajena, “departamentos”
puede ser cualquier
nombre
Se selecciona el campo de referencias “cedula_prof” de la tabla
“departamentos” (que seria la columna o campo local). De la
tabla q se esta relacionando con la tabla “profesores” con el
Se selecciona la tabla campo “cedula”.
“profesores” que se
relacionara con la Se selecciona el campo de referencias
tabla de la tabla “profesores”
Se ingresa el nombre
“departamentos”
de la clave ajena,
puede ser cualquier
nombre
9
Las claves primarias y claves ajenas (claves fk) se
han creado en la tabla “departamentos”, se da
clic en el botón “ok”, para crear la tabla
“departamentos”.
Para ingresar datos desde la interfaz gráfica, se le da clic sobre la tabla a que se le ingresaran los
datos, seleccionamos “View Datos”, luego “ver las 100 filas Superiores” o “ver todas las filas”:
10
A continuación se muestran la interfaz para agregar campos en la tabla “materias”:
A continuación se muestran la interfaz para agregar campos en la tabla “profesores”:
11
DISPARADORES o TRIGGERS
Los disparadores o triggers se harán referentes a los datos, insertados, modificados y eliminados
de la tabla “departamentos”:
+Disparador o trigger “Insertar”
Se crea una tabla donde trabajara dicho disparador, según los datos insertados en la tabla
“departamentos” (ver como crear tablas, en la explicación como crear tablas):
12
13
Se crea una tabla de nombre “departamen_insert”, donde de crean las mismas columnas o
campos de la tabla departamentos, mas tres campos adicionales fecha _insertada (fecha en que
se inserto el dato), “hora_insertada” (hora en que se inserto el datos) y “autor” (usuarios de
Postgre q realizo agrego dicho dato o registro).
A continuación se crea el trigger para la tabla “departamen_insert” que se le puede llamar
auditoria_insert, etc a dicha tabla como lo dice el prof. Daniel Fuentes. En primer lugar se crea la
función disparadora:
Se agrega el nombre de la
función disparador
Se da clic derecho sobre
Seleccionamos el leguaje
“Funciones disparadoras”,
“plpgsql”
seleccionamos “Nueva función
Disparador…”
14
Luego agregamos el código de la función en la pestaña “Definición”:
Información que debemos tener en cuenta, para crear una función disparador:
current_user: el nombre del usuario que esta actualmente conectado a la base de datos y que
ejecuta las sentencias.
current_date: la fecha actual (del servidor, no del cliente)
current_time: La hora actual
NEW: Variable compuesta que almacena los nuevos valores del campo o columnaque se esta
modificando.
OLD: variable compuesta que almacena los valores antiguos de la columna que se esta
modificando.
TG_OP: Variable compuesta tipo string que indica que tipo de evento está ocurriendo (INSERT,
UPDATE, DELETE).
TG_ARGV: Variable tipo arreglo que almacena los parámetros de la función del trigger, podemos
accederlos de la forma TG_ARG[0], TG_ARGV[1], etc.
BEGIN
IF (TG_OP = 'INSERT') THEN
INSERT INTO departamen_insert
VALUES (
NEW.cod_departamento,
NEW.code_materia,
NEW.cedula_prof,
current_date, current_time,
current_user);
END IF;
RETURN NULL;
END;
Le damos al botón “ok” y ya se a creado la función disparador, A continuación creamos el trigger
una vez creada la función disparador.
14
En la tabla “departamentos” donde se insertan los datos, le damos clic derecho a
“Disparadores”, seleccionamos “Nuevo disparador…”:
Se le agrega el nombre del
disparador, puede ser
cualquier nombre
Se selecciona la función Automáticamente se
disparadoras con la que visualiza l código en la tabla
vamos a trabajar en este SQL, le damos click en el
caso botón “OK” para crear el
“depart_insertado_tri” Se selecciona que
trigge
es antes de que se
ejecute el evento,
Se selecciona que el es decir dato nuevo
disparador es de tipo insertado “AFTER”
Insert.
AFTER: Antes del evento
BEFORE: después del evento
14
Cuando un registro sea insertado en la tabla “departamentos” el trigger ejecutara la función
disparadora sobre la tabla “departamento_insert”, isertando en dicha tabla los siguientes datos:
Otra forma de crear los trigger es a través de la consola de pgAdmin II:
Le damos clic al icono donde
esta el lápiz (Ejecutar
consultas SQL arbitrarias)
14
CREATE FUNCTION nombrefuncio (parametros)
RETURNS trigger
AS $$
Se abrirá la siguiente ventana: DECLARE
Variable;
En este caso se agrega la siguiente sentencia Veriable;
BEGIN
CREATE FUNCTION depart_insertado_tri() Sentencia;
RETURNS trigger Sentencia;
AS $$ RETURNS retorno;
BEGIN END;
$$
IF (TG_OP = 'INSERT') THEN
Language ‘plpgsql’
INSERT INTO departamen_insert VALUES (
NEW.cod_departamento, NEW.code_materia, NEW.cedula_prof,
current_date, current_time, current_user);
END IF;
RETURN NULL;
END;
$$
Language 'plpgsql';
Una vez insertada la
sentencia le damos en el
icono (Ejecutar consulta)
Para agregar un trigger
primero se crea la sentencia
de función disparador
El mensaje que aparece es
porque ya fue creado
Luego de crear la sentencia se crea el trigger o disparador, en la misma consola (borramos el
otro ya creado) y le damos ejecutar a la nueva sentencia a continuación:
CREATE TRIGGER depart_insert
AFTER INSERT ON departamentos
FOR EACH ROW
EXECUTE PROCEDURE depart_insertado_tri();
14
CREATE TRIGGER nombredel trigger =creación del trigger
[AFTER][BEFORE]= Antes o después del evento
[INSERT][UPDATE][DELETE]=El tipo de evento al que se responderá
ON nombretabla= De que tabla se esperarán los eventos
FOR EACHT [ROW [STATEMENT]]= Para cada fila o para cada sentencia
EXECUTE PROCEDURE función= La función que se va a ejecutar (con sus
parámetros si es que los necesitara) nombrefuciondisparadora;
Una vez insertada la
sentencia le damos en el
icono (Ejecutar consulta) y
listo trigger creado
Sentencia de trigger
El mensaje que aparece es
porque ya fue creado
14
Disparador o trigger para modificar o actualizar:
Update
create table depart_actualizado (
cod_dept_anterior integer NOT NULL,
cod_dept_actualizado integer NOT NULL,
code_materia integer,
cedula_prof integer,
fecha_cambio date,
hora_cambio time with time zone,
autor character varying(255),
PRIMARY KEY (cod_dept_anterior)
);
Función disparadora:
create function dept_actualizado_tri()
Trigger o disparador:
returns trigger
AS $$
create trigger actuaizar_dept
BEGIN
after update on departamentos
IF (TG_OP = 'UPDATE') THEN
for each row
INSERT INTO depart_actualizado values (
execute procedure
OLD.cod_departamento, NEW.cod_departamento,
dept_actualizado_tri();
OLD.code_materia, OLD.cedula_prof,
current_date, current_time, current_user);
END IF;
RETURN NULL;
END;
$$
Language 'plpgsql';
14
Disparador o trigger para eliminar o borrar:
Delete
create table dept_eliminado (
cod_departamento integer NOT NULL,
code_materia integer,
cedula_prof integer,
autor varchar(100) not null,
fecha_eliminacion date not null,
hora_eliminacion time with time zone not null
);
Función disparadora:
CREATE FUNCTION dept_eliminado_tri()
RETURNS trigger
Trigger o disparador:
AS $$
BEGIN
CREATE TRIGGER eliminar_dpt
IF (TG_OP = 'DELETE') THEN
BEFORE DELETE ON departamentos
INSERT INTO dept_eliminado VALUES (
FOR EACH ROW
OLD.cod_departamento, OLD.code_materia,
EXECUTE PROCEDURE
OLD.cedula_prof, current_user, current_date,
dept_eliminado_tri();
current_time);
END IF;
RETURN NULL;
END;
$$
Language 'plpgsql';
14