Documentos de Académico
Documentos de Profesional
Documentos de Cultura
modelo ACID
• A: Atomicity – Atomicidad -> Separar las funciones desarrolladas en la BD como
pequeñas tareas y ejecutarlas como un todo. Si alguna tarea falla se hace un
rollback(Se deshacen los cambios)
• C: Consistency – Consistencia -> Todo lo que se desarrolló en base al objeto
relacional. Los datos tienen congruencia
• I: Isolation – Aislamiento -> Varias tareas ejecutándose al mismo tiempo dentro
de la BD
• D: Durability – Durabilidad -> Puedes tener seguridad que la información no se
perderá por un fallo catastrófico. PostgreSQL guarda la información en una Bitácora
comandos
ENTRAR A LA CONSOLA DE POSTGRES
psql -U postgres -W
VER LOS COMANDOS \ DE POSTGRES
\?
LISTAR TODAS LAS BASES DE DATOS
\l
VER LAS TABLAS DE UNA BASE DE DATOS
\dt
CAMBIAR A OTRA BD
\c nombre_BD
DESCRIBIR UNA TABLA
\d nombre_tabla
VER TODOS LOS COMANDOS SQL
\h
VER COMO SE EJECTUA UN COMANDO SQL
\h nombre_de_la_funcion
CANCELAR TODO LO QUE HAY EN PANTALLA
Ctrl + C
VER LA VERSION DE POSTGRES INSTALADA, IMPORTANTE PONER EL ';'
SELECT version();
VOLVER A EJECUTAR LA FUNCION REALIADA ANTERIORMENTE
\g
INICIALIZAR EL CONTADOR DE TIEMPO PARA QUE LA CONSOLA TE DIGA EN CADA EJECUCION
¿CUANTO DEMORO EN EJECUTAR ESA FUNCION?
\timing
LIMPIAR PANTALLA DE LA CONSOLA PSQL
Ctrl + L
ARCHIVOS DE CONFIGURACION
\q Cerrar la consola
Ejecutando consultas en la base de datos usando la consola
Tipos de datos
Principales:
Numéricos(Numeros enteros, Numeros Decimales, Seriales)
Monetarios(cantidad de moneda)
Texto(almacenar cadenas y texto, existen tres VARCHAR, CHAR, TEXT)
Binario(1 Y 0)
Fecha/Hora(Para almacenar Fechas y/o Horas, DATE TYPE, TIME TYPE, TIMESTAMP,
INTERVAL)
Boolean(Verdadero o Falso)
Especiales propios de postgres
Geométricos: Permiten calcular distancias y áreas usando dos valores X y Y.
Direcciones de Red: Cálculos de máscara de red
Texto tipo bit: Cálculos en otros sistemas, ejm(hexadecimal, binario)
XML, JSON: Postgres no permite guardar en estos formatos
Arreglos: Vectores y Matrices
Servidor de base de datos: Computador que tiene un motor de base de datos instalado
y en ejecución.
Motor de base de datos: Software que provee un conjunto de servicios encargados de
administrar una base de datos.
Tablas de base de datos: Estructura que organiza los datos en filas y columnas
formando una matriz.
Particiones
- Separacion fisica de datos
- Estructura logica
-- Tabla bitacora_viaje
CREATE TABLE public.bitacora_viaje(
id serial,
id_viaje integer,
fecha date
) PARTITION BY RANGE (fecha) WITH (OIDS = FALSE);
ALTER TABLE public.bitacora_viaje OWNER to postgres;
funciones
ON CONFLICT DO
Esta instruccion nos permite especificar que debemos hacer en caso de un conflicto.
RETURNING
Returning nos devuelve una consulta select de los campos sobre los que ha tenido
efecto la instruccion.
Ejemplo: Queremos saber cual es el id que le fue asignado a un dato insertado.
Like / Ilike
Las funciones like y ilike sirven para crear consultas a base de expresiones
regulares.
Like considera mayusculas y minusculas, mientras que ilike solo considera las
letras.
Ejemplo: Busquemos a los pasajeros con nombre que terminen con la letra o
-- Usando LIKE
SELECT * FROM PASAJERO
WHERE pasajero.nombre LIKE '%O'
-- No devulve nada, porque ningun nombre terminara con una letra mayuscula
IS / IS NOT
Permite hacer comprobacion de valores especiales como null
Ejemplo: Consultemos a todos los usuarios que tengan como direccion_residencia NULL
-- IS
SELECT * FROM PASAJERO
WHERE pasajero.nombre IS null;
Ahora a los que si tengan la direccion_recidencia con algun valor
-- IS NOT
SELECT * FROM PASAJERO
WHERE pasajero.nombre IS NOT null;
vistas
es una consulta que se realiza muy amenudo
tipos de vistas
volatiles; informacion reciente
vistas materializada,
Agarra una consulta que se realice muchas veces y colocarla bajo un solo nombre.
Centraliza muchos esfuerzos en una sola función.
Vista volátil: Siempre que se haga la consulta en la vista, la BD hace la ejecución
de la consulta en la BD, por lo que siempre se va a tener información reciente.
Vista materializada: Hace la consulta una sola vez, y la información queda
almacenada en memoria, la siguiente vez que se consulte, trae el dato almacenado,
eso es bueno y malo a la vez, bueno porque la velocidad con la que se entrega la
información es rápida, malo porque la información no es actualizada. Es ideal
utilizar este tipo de vista en procesos que utilice días anteriores, porque el día
de ayer, ya pasó y no hay razón para actualizarlo.
Para crear una vista volátil en postgres, damos click derecho a views, create,
view, le damos un nombre, y en la pestaña code escribimos o pegamos el código de la
consulta que queremos guardar, la guardamos y para usar la vista usamos:
PL
PROCESOS ALMACENADOS
CREATE FUNTION importantePL()
RETURN void
AS $$
DECLARE
contador intger :=0;
rec record;
BEGIN
FOR rec IN SELECT * FROM pasajeros LOOP
RAISE NOTICE 'un pasajero se llama %', rec.nom_pasajero;
contador := contador + 1;
END lOOP;
RAISE NOTECE 'Conteo es%',contador;
END
$$
LEGUAGE PLPGSQL
DECLARE
contador integer :=0;
rec record;
BEGIN
FOR rec IN SELECT * FROM public."pasajeros " LOOP
RAISE NOTICE 'un pasajero se llama %', rec.nom_pasajero;
contador := contador + 1;
END lOOP;
INSERT INTO conteo(total,tiempo)
VALUES (Contador,now());
RETURN contador;
END
ambién conocidos como disparadores. Permiten ejecutar funciones dependiendo de
acciones que se ejecuten dentro de una DB.
Insert.
Update.
Delete.
Primero validamos la función, y que podamos guardar datos en una nueva tabla que
hemos creado, para este caso se llamará ‘passenger_counter’. Seleccionamos en el
menú desplegable las funciones, la función que vamos a editar, en este caso es
testPL, y añadimos la función para añadir la cantidad de pasajeros.
COST 100
VOLATILE
AS $BODY$DECLARE
rec record;
counter integer := 0;
BEGIN
FOR rec IN SELECT * FROM passenger LOOP
RAISE NOTICE 'Un pasajero se llama %', rec.name;
counter := counter + 1;
END LOOP;
INSERT INTO passenger_counter (total, time)
VALUES (counter, now());
RETURN counter;
END$BODY$;
DO $$
DECLARE
contador intger :=0;
rec record;
BEGIN
FOR rec IN SELECT * FROM pasajeros LOOP
RAISE NOTICE 'un pasajero se llama %', rec.nom_pasajero;
contador := contador + 1;
END lOOP;
RAISE NOTECE 'Conteo es%',contador;
END
$$
TRIGGERS
DISPARADOPRES
ACCCIONES
INSERT
DELETE
UPDATE