Pestaña 1
Introducción a SQL
(Resumen en página 135)
Éste lenguaje fue desarrollado por IBM en la década de 1970 y se ha
convertido en un estándar para interactuar con las bases de datos
relacionales. Se han desarrollado sobre esta base común diversas
versiones ampliadas como las de Oracle, Microsoft SQL Server,
PostgreSQL, etc con algunas características diferentes.
SQL (Structured Query Language) es un lenguaje de base de datos
normalizado utilizado para gestionar y manipular bases de datos
relacionales u objeto-relacionales.
Es un lenguaje declarativo en el que las órdenes especifican cuál debe
ser el resultado y no la manera de conseguirlo (como ocurre en los
lenguajes procedimentales).
Ejemplo de sentencia
declarativa normalizada
SELECT nombre FROM ciudades WHERE poblacion>10000 ORDER
BY poblacion;
La consulta devuelve el nombre de las ciudades cuya población es
mayor de 10000 habitantes y los muestra ordenados por cantidad de
habitantes en cualquier SGBD.
Lenguaje de manipulación de
Datos DML
DML, por sus siglas en inglés Data Manipulation Language, permite a
los usuarios ingresar datos para posteriormente realizar consultas o
modificaciones en los mismos.
Sentencias
-DELETE, utilizado para eliminar datos.
-UPDATE, sirve para modificar los valores ingresados.
-INSERT, instrucción para insertar valores en la base de datos.
-SELECT, se utiliza para consultar datos.
Lenguaje de definición de
Datos DDL
DDL, por sus siglas en inglés Data Definition Language se utiliza para
definir y modificar la estructura de la base de datos.
Sentencias:
-ALTER, modifica la estructura de objetos existentes.
-CREATE, crea objetos de base de datos.
-TRUNCATE, elimina todos los registros de una tabla.
-DROP, elimina objetos de la base de datos.
Lenguaje de control de datos
DCL
DCL por sus siglas en inglés Data Control Language, este lenguaje
permite al Administrador del sistema de base de datos, controlar el
acceso a los objetos, es decir, podemos otorgar o denegar permisos a
uno o más roles para realizar determinadas tareas.
Sentencias:
-GRANT, otorga permisos.
-REVOKE, eliminar los permisos previamente concedidos.
Lenguaje de control de
transacción
TLC por sus siglas en inglés Transaction Control Language, al igual que
los demás es un sublenguaje de SQL y se enfoca en controlar el
procesamiento de las transacciones en una base de datos.
Sentencias:
-COMMIT, sirve para grabar los cambios de forma permanente en la
base de datos.
-ROLL BACK, permite restaurar la base de datos a su estado
“commiteado” anterior, deshaciendo cualquier cambio que no se desee
conservar permanentemente.
-SAVE POINT, sirve para crear puntos de restauración ante fallas.
SQL Embebido en la aplicación
Las aplicaciones que almacenan sus datos en una base de datos
relacional introducen sentencias SQL directamente dentro del código de
la aplicación escrita en un lenguaje de programación (como Java, PHP,
Python, etc.) para interactuar con la base de datos. Este enfoque
permite realizar operaciones de consulta y manipulación de datos
directamente desde la aplicación, utilizando el lenguaje de programación
para enviar comandos SQL al servidor de la base de datos.
Cada Base de Datos Relacional tiene su lenguaje de programación para
crear Funciones, Procedimientos y Paquetes y Triggers que quedan
como objetos dentro de la Base de Datos y pueden ser ejecutados
desde la aplicación.
Introducción PostgreSQL
PostgreSQL es un sistema de gestión de bases de datos (SGBD)
relacional de código abierto que se destaca por su estabilidad y
rendimiento para manejar grandes volúmenes de datos.
Fue desarrollado originalmente en el año 1986 en la Universidad de
California en Berkeley por un equipo liderado por Michael Stonebraker.
PostgreSQL ha experimentado un desarrollo continuo y una evolución
significativa siendo impulsado por una comunidad activa de
desarrolladores y usuarios que han contribuido a su mejora y expansión.
Se encuentra en constante desarrollo, con nuevas versiones y mejoras
lanzadas regularmente.
Principales
características
Código Abierto: PostgreSQL es libre y su código fuente está disponible
para modificación y distribución.
Estabilidad y Confiabilidad: Conocido por su robustez, ha sido probado y
usado en producción durante muchos años lo que demuestra su
capacidad para manejar grandes volúmenes de datos y cargas de
trabajo exigentes.
-Soporte para Transacciones ACID: Cumple con el estándar ACID
(Atomicidad, Consistencia, Aislamiento, Durabilidad), lo que garantiza la
integridad de los datos y la consistencia de las transacciones incluso en
situaciones de fallos o alta concurrencia.
-Escalabilidad: Altamente escalable, puede manejar grandes
volúmenes de datos y aprovechar múltiples núcleos de procesador para
un rendimiento óptimo.
-Replicación y Alta Disponibilidad: Ofrece opciones de replicación
para mantener la disponibilidad de los datos y crear sistemas tolerantes
a fallos.
-Extensibilidad: Permite agregar funciones personalizadas y
extensiones, adaptando la base de datos a necesidades específicas.
-Seguridad Avanzada: Incluye autenticación basada en roles, control
de acceso granular y encriptación de datos para proteger la información
sensible.
—---------------------------------------------------------------------------------------------
Sintaxis básica SQL
Una entrada de SQL consiste en una secuencia de comandos. Un
comando está compuesto por una secuencia de elementos, terminados
por un punto y coma (“;”).
Un elemento puede ser una palabra clave, un identificador, un
identificador entre comillas, un literal (o constante) o un símbolo de
carácter especial. Los elementos normalmente están separados por
espacios en blanco (espacio, tabulación, nueva línea).
Ejemplo de entrada SQL
Esta es una secuencia de tres comandos, uno por línea (aunque esto no
es obligatorio; se pueden tener más de un comando en una línea y los
comandos pueden dividirse en varias líneas).
Comentarios
Los comentarios pueden incluirse en la entrada para incluir notas y
descripciones en el código SQL. No afectan la ejecución de las
consultas, se manejan como espacios en blanco .
La secuencia correcta de las cláusulas en una consulta SQL es:
SELECT: Se especifican las columnas que se desean recuperar.
FROM: Se especifica la tabla o conjunto de datos de donde se desea
obtener los datos.
WHERE: Se filtran los datos según una condición específica.
GROUP BY: Se agrupan los datos según una o más columnas.
HAVING: Se filtran los grupos de datos según una condición específica.
ORDER BY: Se ordenan los datos según una o más columnas.
LIMIT: Se especifica el número máximo de filas que se desean
recuperar.
Por lo tanto, la secuencia correcta es: SELECT, FROM, WHERE,
GROUP BY, HAVING, ORDER BY y finalmente LIMIT.
FUNCIONES DE GRUPO
DISTINCT, LIMIT
JOINS
SUBCONSULTAS
EXPRESIONES REGULARES
FUNCIONES DE TEXTO
FUNCIONES DE FECHA (DATEPART)
ROLES PRIVILEGIOS Y USUARIOS
TRANSACCIONES
COMANDOS DE ALTA BAJA Y MODIFICACION
VISTAS
INDICES
TABLESPACE
ARCHIVOS LOGS REINICIO
MODULO 4 PARAMETROS DE UNA FUNCION
ESTRUCTURAS DE CONTROL SQL
GESTION DE PROCEDIMIENTOS Y FUNCIONES EN SQL: CREACION EJEMPLO Y
ELIMINACION
TRIGGERS
● RESUMEN
Definicion SQL
SQL (Structured Query Language) es un lenguaje de base de datos
normalizado utilizado para gestionar y manipular bases de datos
relacionales u objeto-relacionales.
Sublenguajes
DML -Data manipulation Language(Inserción, actualización y eliminación de datos)
-Select
-Insert
-Update
-Delete
DDL - Data Definition Language(Creacion, modificacion y eliminacion de objetos)
-Create
-Alter
-Drop
-Truncate
DCL - Data Control Language(Permisos, roles)
-Grant
-Revoque
TCL - Transactional Control Language(Transacciónes)
-Save Point
-Rollback -Commit
Introducción postgreSQL
PostgreSQL es un sistema de gestión de bases de datos (SGBD)
relacional de código abierto que se destaca por su estabilidad y
rendimiento para manejar grandes volúmenes de datos.
Características:
-Código Abierto
-Estabilidad y confiabilidad
-Soporte para transacciones ACID(Atomicidad, Consistencia,
Aislamiento, Durabilidad)
-Escalabilidad
-Replicación y Alta Disponibilidad
-Extensibilidad
-Seguridad Avanzada
Sintaxis SQL
-El texto se escribe en comillas simples ‘’
Operadores:
-Aritméticos: +-*/%
-De comparación:=,!=,<,>,<=,>=
-Lógicos: AND, OR, NOT
Tipos de datos:
TEXTO
-Char(texto longitud fija)
-Varchar(texto longitud variable, hay que especificar el máximo de
caracteres):VARCHAR(255);
-Text(Texto longitud variable sin límite específico)
NUMÉRICOS
Smallint
INT
BIGINT
FECHA/HORA
-Timestamp(almacena fecha y hora, sin zona horaria)
yyyy-mm-dd hh:mm:ss
-Date(almacena solo la fecha)yyyy-mm-dd
-Time(almacena solo la hora)hh:mm:ss
TIPO BOOLEANO
boolean(puede tomar 3 datos, TRUE, FALSE, UNKNOWN)
TIPO BINARIO
-BYTEA(almacena datos binarios en las filas de una tabla)
-LOB(almacena datos binarios grandes, que normalmente no entrarían
en una fila de una tabla, para esto usa OID(Object Identifier))
TIPO AUTOINCREMENTAL
SERIAL(es un tipo de dato entero con una secuencia para generar
automáticamente valores únicos y consecutivos, se usa mucho en
identificadores(primary keys por lo general))
DATOS SEMI ESTRUCTURADOS
-jsonb(almacena datos del tipo json en una representacion binaria)
COMANDOS BASE DE DATOS
CREATE DATABASE nombre_database;
si no se indica usuario propietario, por defecto se creará para el usuario
que la ejecute
CREATE DATABASE nombre_database OWNER nombre_usuario;
DROP DATABASE nombre_database;
ESQUEMAS
Un esquema en postgreSQL es una coleccion de objetos de base de
datos como tablas, vistas, funciones, etc.
Sirven para organizar y gestionar estos objetos de manera estructurada
CREATE SCHEMA nombre_esquema AUTHORIZATION nombre_user;
para mover objetos de un esquema a otro se usa el siguiente comando:
ALTER TABLE nombre_tabla SET SCHEMA nombre_esquema;
TABLAS
SINTAXIS:
CREATE TABLE nombre_tabla (
atributo tipo_dato restricciones,
atributo tipo_dato restricciones,
…
restricciones_tabla);
PALABRAS CLAVE
CREATE, sirve para crear:
-Bases de datos
-Esquemas
-Tablas
-Índices
ALTER modifica objetos existentes como:
-Tablas
-Esquemas
Algunos usos son:
CASCADE:elimina la columna y también las dependencias relacionadas
como restricciones y claves foraneas que referencian a esa columna:
RESTRICT: impide la eliminacion de la columna si hay dependencias
que aún existen, si hay claves foraneas o restricciones, se genera un
error.
DROP:Eliminar objetos existentes.
Ejemplos:
DROP DATABASE tienda;
DROP TABLE empleados;
DROP SCHEMA ventas CASCADE;
● DROP FUNCTION calcular_total(NUMERIC, NUMERIC);
Es recomendable usar esta sentencia con las palabras reservadas IF
EXISTS para que no produzca error si la tabla no existe.
DROP TABLE IF EXIST autos;
Diferencias con otros comandos que también eliminan cosas:
● DELETE → elimina filas (con opción de filtrar con WHERE).
● TRUNCATE TABLE → elimina todas las filas rápidamente, pero no
permite WHERE.
● DROP TABLE → elimina la tabla completa (estructura + datos).
CONSTRAINTS
Las restricciones se pueden agregar cuando creamos el dato( nombre
VARCHAR(50) NOT NULL,) o al final de la creacion de la tabla
(CONSTRAINT UK_cliente_fecha UNIQUE (id_cliente, fec_pedido))
sintaxis:
CONSTRAINT nombre_constraint tipo_constraint
(dato_p_constraint1,_dato_p_constraint_2)
NOT NULL asegura que la columna no tenga valores nulos
UNIQUE asegura que todos los valores de una columna o conjunto de
estas sean únicos.
PRIMARY KEY es una combinación de unique y not null, se usa como
identificador único de la tabla donde se crea
FOREIGN KEY hace referencia a otra tabla, es un identificador único de
una fila de otra tabla
ejemplo:
CONSTRAINT FK_empleados_departamento FOREIGN KEY
(id_departamento) REFERENCES departamentos(id_departamento)
CHECK asegura que los valores cumplan un condición especifica
ejemplo:
CREATE TABLE empleados(salario INT CHEK(salario>0));
INSERCCION DE DATOS
INSERT INTOempleados(nombre, sueldo, fecha_ingreso)
VALUES(‘nicolas’, 1000000, ‘01/09/2025’);
o
INSERT INTO empleados
VALUES(‘nicolas’, 1000000, ‘01/09/2025’);
ELIMINACION DE DATOS
DELETE FROM nombre_tabla WHERE condición;
CONDICIÓN WHERE
La secuencia correcta de las cláusulas en una consulta SQL es:
SELECT: Se especifican las columnas que se desean recuperar.
FROM: Se especifica la tabla o conjunto de datos de donde se desea
obtener los datos.
WHERE: Se filtran los datos según una condición específica.
GROUP BY: Se agrupan los datos según una o más columnas.
HAVING: Se filtran los grupos de datos según una condición específica.
ORDER BY: Se ordenan los datos según una o más columnas.
LIMIT: Se especifica el número máximo de filas que se desean
recuperar.
Por lo tanto, la secuencia correcta es: SELECT, FROM, WHERE,
GROUP BY, HAVING, ORDER BY y finalmente LIMIT.
EJEMPLOS:
SELECT nombre, salario FROM empleados WHERE departamento =
'Ventas' ORDER BY salario DESC LIMIT 5;
SELECT departamento, AVG(salario) AS salario_promedio FROM
empleados GROUP BY departamento HAVING AVG(salario) > 3000
ORDER BY salario_promedio DESC;
SELECT departamento, COUNT(*) AS cantidad_empleados
FROM empleados WHERE fecha_contratacion >= '2020-01-01' GROUP
BY departamento HAVING COUNT(*) > 10 ORDER BY
cantidad_empleados DESC LIMIT 3;
FROM (elige la tabla)
↓
WHERE (filtra filas)
↓
GROUP BY (agrupa resultados)
↓
HAVING (filtra grupos)
↓
SELECT (elige columnas)
↓
ORDER BY (ordena resultados)
↓
LIMIT (recorta el resultado final)
🔹 Funciones de Agregación en SQL
Se aplican sobre un conjunto de filas y devuelven un único valor.
Generalmente se usan junto con GROUP BY.
COUNT() → Devuelve la cantidad de filas.
SELECT COUNT(*) FROM empleados;
● (Ejemplo: cuántos empleados hay en total).
SUM() → Suma los valores de una columna numérica.
SELECT SUM(salario) FROM empleados;
● (Ejemplo: suma de todos los salarios).
AVG() → Calcula el promedio.
SELECT AVG(salario) FROM empleados;
● (Ejemplo: salario promedio).
MIN() → Devuelve el valor mínimo.
SELECT MIN(salario) FROM empleados;
● (Ejemplo: salario más bajo).
MAX() → Devuelve el valor máximo.
SELECT MAX(salario) FROM empleados;
● (Ejemplo: salario más alto).
DISTINCT se usa para eliminar filas duplicadas de los resultados de una
consulta
SELECT DISTINCT columna 1, columna 2, FROM nombre_tabla;
JOINS
Los joins permiten combinar datos de multiples tablas en una sola
consulta.
Tipos de joins
INNER JOIN:retorna registros que tienen valores coincidentes en ambas
tablas.
LEFT JOIN retorna todos los registros de la tabla izquierda(primera
tabla mencionada) y los registros coincidentes de la tabla derecha
(segunda tabla mencionada)
RIGHT JOIN retorna todos los registros de la tabla derecha(segunda
tabla mencionada) y los registros coincidentes de la tabla izquierda
(primera tabla mencionada)
FULL JOIN retorna todos los registros cuando hay una coincidencia en
cualquiera de las tablas, los registros sin coincidencias tienen valor
NULL en el lado opuesto.
CROSS JOIN retorna el producto cartesiano(todas las combinaciones
posibles) de filas.
SUBCONSULTAS
🔹 Subconsultas
Son consultas dentro de otra consulta, encerradas entre paréntesis.
Se usan cuando necesitas un valor intermedio para filtrar o calcular.
🔸 Tipos principales:
Escalares → devuelven un solo valor.
SELECT nombre, salario
FROM empleados
WHERE salario > (SELECT AVG(salario) FROM empleados);
(Comparo cada salario con el promedio).
De fila o columna → devuelven una sola fila/columna.
SELECT *
FROM empleados
WHERE departamento_id = (SELECT id FROM departamentos WHERE
nombre = 'Ventas');
De tabla (multifila) → devuelven varias filas, usadas con IN, ANY, ALL.
SELECT nombre
FROM empleados
WHERE departamento_id IN (SELECT id FROM departamentos
WHERE ubicacion = 'Montevideo');
🔹 Subconsulta correlacionada
Una subconsulta correlacionada es una subconsulta que depende de la
fila de la consulta principal.
Es decir, la subconsulta se ejecuta una vez por cada fila de la consulta
externa.
🔹 Características clave
1. Tiene referencias a columnas de la consulta externa.
2. No se puede ejecutar de forma independiente (porque necesita el
valor de la fila actual).
3. Se usa típicamente en WHERE o SELECT para hacer
comparaciones dinámicas fila por fila.
🔹 Ejemplo
Tabla empleados (id, nombre, salario, departamento_id)
Tabla departamentos (id, nombre)
SELECT [Link], [Link]
FROM empleados e
WHERE [Link] > (
SELECT AVG([Link])
FROM empleados e2
WHERE e2.departamento_id = e.departamento_id
);
Explicación:
● La subconsulta calcula el salario promedio del mismo
departamento de cada empleado.
● La subconsulta depende de e.departamento_id de la fila actual →
eso la hace correlacionada.
👉 En resumen: una subconsulta sirve para usar el resultado de otra
consulta como condición o dato dentro de la consulta principal.
EXPRESIONES REGULARES
LIKE /NOT LIKE
son operadores de comparacion que utilizan comodines sql para realizar coincidencias entre
patrones.
LIKE devuelve true cuando se cumple la coincidencia mientras que NOT LIKE niega al like,
y devuelve true cuando no se cumple la coincidencia
son sensibles a mayúsculas
ILIKE/NOT ILIKE igual que el anterior pero NO es sensible a mayúsculas
FUNCIONES DE TEXTO
Función Qué hace Ejemplo
LEFT(text, n) Devuelve los primeros n LEFT('Hola Mundo', 4) →
caracteres de un texto 'Hola'
RIGHT(text, n) Devuelve los últimos n RIGHT('Hola Mundo', 5) →
caracteres 'Mundo'
CONCAT(text1, text2, …) Une (concatena) varios CONCAT('Hola', ' ',
textos 'Mundo') → 'Hola Mundo'
LENGTH(text) Devuelve la cantidad de LENGTH('Hola Mundo') →
caracteres del texto 10
REPLACE(text, buscar, Reemplaza una REPLACE('Hola Mundo',
reemplazar) subcadena por otra 'Mundo', 'SQL') → 'Hola
SQL'
FUNCIONES DE FECHA
💡 Tip rápido:
● Usa DATE si solo te interesa la fecha.
● Usa TIMESTAMP o TIMESTAMPTZ si necesitas hora y potencialmente zona
horaria.
● DATE_PART es tu herramienta para sacar años, meses, días o horas de
cualquier tipo de fecha/hora.
Función / Tipo Qué hace Ejemplo
DATE Tipo de dato que almacena '2025-09-02'::DATE
solo fecha (año-mes-día)
TIME Tipo de dato que almacena '14:30:00'::TIME
solo hora
(hora:minuto:segundo)
TIMESTAMP Tipo de dato que almacena '2025-09-02
fecha y hora sin zona horaria 14:30:00'::TIMESTAMP
TIMESTAMPTZ Tipo de dato que almacena '2025-09-02
fecha y hora con zona horaria 14:30:00-03'::TIMESTA
MPTZ
DATE_PART('campo', Extrae una parte de la DATE_PART('year',
fecha) fecha/hora (year, month, day, '2025-09-02'::DATE) →
hour, etc.) 2025
USUARIOS ROLES Y PRIVILEGIOS
Usuarios = cuentas con login
Roles = conjunto de permisos que se pueden asignar a usuarios
Privilegios = permisos sobre objetos (SELECT, INSERT, etc.)
CREATE USER nombre_usuario WITH PASSWORD ‘contraseña’;
CREATE ROLE nombre_usuario WITH LOGIN PASSWORD ‘contraseña’;
CREATE ROLE nombre_rol;
GRANT nombre_rol TO nombre_usuario;
DROP ROLE nombre_rol;
GRANT privilegio ON objeto TO rol;
REVOKE privilegio ON objeto FROM rol;
TRANSACCIONES
🔹 Transacciones en SQL
1️⃣ Definición
Una transacción es un bloque de operaciones SQL que se ejecutan
como una unidad de trabajo atómica.
● O todas se aplican (COMMIT)
● O ninguna se aplica (ROLLBACK)
Sirve para mantener la consistencia de la base de datos.
2️⃣ Sintaxis básica
BEGIN; -- inicia la transacción
-- aquí van tus operaciones SQL
COMMIT; -- confirma los cambios
● BEGIN o START TRANSACTION: inicia la transacción
● COMMIT: confirma todos los cambios hechos dentro de la
transacción
● ROLLBACK: deshace todos los cambios hechos dentro de la
transacción
3️⃣ Savepoint
Un savepoint permite crear puntos intermedios dentro de una
transacción para poder revertir parcialmente sin afectar todo.
SAVEPOINT sp1; -- crea un punto de guardado
ROLLBACK TO sp1; -- revierte solo hasta el savepoint
RELEASE SAVEPOINT sp1; -- elimina el savepoint
● ROLLBACK TO → deshace hasta el savepoint, dejando la
transacción activa
● RELEASE SAVEPOINT → elimina el savepoint porque ya no se
necesita
4️⃣ Ejemplo completo
BEGIN;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
SAVEPOINT antes_insertar;
INSERT INTO transacciones (id_cuenta, monto, tipo)
VALUES (1, 100, 'retiro');
-- supongamos que hubo un error, solo deshacemos el insert
ROLLBACK TO antes_insertar;
COMMIT; -- confirma el UPDATE, pero no el INSERT
💡 Tips rápidos:
● Las transacciones son útiles para operaciones críticas, como
pagos o transferencias bancarias.
● Siempre usar COMMIT o ROLLBACK para evitar dejar la base de
datos en un estado inconsistente.
¡Perfecto, Nico!😎 Vamos a explayarnos un poco más sobre la
administración de bases de datos en PostgreSQL,
especialmente sobre los parámetros avanzados al crear una base
de datos.
🔹 Administración de Bases de Datos en PostgreSQL
1️⃣ Alta (Crear Base de Datos)
La creación de una base de datos se hace con CREATE DATABASE. La
sintaxis completa:
● CREATE DATABASE nombre_base
● [OWNER propietario]
● [TEMPLATE plantilla]
● [ENCODING 'UTF8']
● [LC_COLLATE 'es_ES.UTF-8']
● [LC_CTYPE 'es_ES.UTF-8']
● [TABLESPACE tablespace];
Explicación de los parámetros importantes:
● OWNER
Define quién será el propietario de la base de datos.
○ El propietario tiene todos los privilegios sobre la base.
○ Ejemplo: OWNER user1
● TEMPLATE
Indica la base de datos de la cual se copiarán todos los objetos
y datos iniciales.
○ PostgreSQL viene con la base de datos template1 por
defecto, que se utiliza como plantilla si no se especifica otra.
○ Esto permite crear bases de datos con configuraciones o
estructuras predefinidas.
○ Ejemplo: TEMPLATE template1
● ENCODING
Define la codificación de caracteres de la base de datos.
○ Determina cómo se almacenan los caracteres.
○ Comúnmente se usa 'UTF8' para soportar caracteres
especiales de varios idiomas.
○ Ejemplo: ENCODING 'UTF8'
● LC_COLLATE
Define las reglas de ordenamiento (collation) para la base de
datos.
○ Determina cómo se ordenan los datos al hacer consultas
con ORDER BY.
○ Ejemplo: 'es_ES.UTF-8' ordena según el alfabeto
español.
● LC_CTYPE
Define cómo PostgreSQL interpreta las mayúsculas,
minúsculas y caracteres especiales.
○ Es importante para funciones como UPPER(), LOWER() o
comparaciones de texto.
○ Ejemplo: 'es_ES.UTF-8' hace que ñ se maneje
correctamente como una letra.
● TABLESPACE
Define la ubicación física en disco donde se almacenará la base
de datos.
○ Permite separar bases de datos en distintos discos o
particiones.
Ejemplo completo:
● CREATE DATABASE ventas
● OWNER user1
● TEMPLATE template1
● ENCODING 'UTF8'
● LC_COLLATE 'es_ES.UTF-8'
● LC_CTYPE 'es_ES.UTF-8'
● TABLESPACE pg_default;
2️⃣ Baja (Eliminar Base de Datos)
● DROP DATABASE nombre_base;
● Borra completamente la base y todos sus objetos.
● No se puede eliminar si hay conexiones activas.
● Ejemplo:
● DROP DATABASE ventas;
3️⃣ Modificación (Cambiar Propiedades)
● Cambiar propietario
● ALTER DATABASE ventas OWNER TO admin;
● Renombrar base de datos
● ALTER DATABASE ventas RENAME TO ventas2025;
● Nota: no se puede cambiar ENCODING o LC_COLLATE de una
base ya creada; estos solo se definen al crear la base.
💡 Resumen rápido:
● CREATE DATABASE → alta / creación
● DROP DATABASE → baja / eliminación
● ALTER DATABASE → modificación / cambio de propietario o
nombre
● TEMPLATE, ENCODING, LC_COLLATE, LC_CTYPE son importantes
para estructura inicial, codificación y comportamiento de
texto.
¡Claro, Nico! 😎
Aquí tienes un resumen corto sobre vistas en
SQL/PostgreSQL:
🔹 Vistas
1️⃣ Definición
Una vista es una consulta guardada como un objeto en la base de
datos.
● No almacena datos por sí misma (salvo que sea materialized
view)
● Sirve para simplificar consultas complejas y mejorar la seguridad
al mostrar solo ciertos campos.
2️⃣ Sintaxis básica
CREATE VIEW nombre_vista AS
SELECT columna1, columna2, ...
FROM tabla
WHERE condiciones;
● CREATE VIEW → crea la vista
● SELECT → define los datos que mostrará la vista
3️⃣ Ejemplo
CREATE VIEW vista_clientes_activos AS
SELECT id_cliente, nombre, email
FROM clientes
WHERE estado = 'activo';
● Ahora puedes hacer consultas como si fuera una tabla:
SELECT * FROM vista_clientes_activos;
4️⃣ Características
● Simplicidad: facilita consultas complejas.
● Seguridad: permite mostrar solo columnas o filas específicas.
● Actualización: algunas vistas se pueden actualizar si cumplen
ciertas condiciones.
● Materializadas: CREATE MATERIALIZED VIEW guarda los
resultados físicamente para consultas más rápidas.
🔹 Índices en SQL/PostgreSQL
1️⃣ Definición
Un índice es una estructura que acelera las búsquedas y consultas
sobre una tabla.
● Funciona como el índice de un libro: permite encontrar datos sin
recorrer toda la tabla.
● No almacena datos extra, solo referencias a las filas.
2️⃣ Sintaxis básica
CREATE INDEX nombre_indice
ON nombre_tabla (columna1, columna2, ...);
● CREATE INDEX → crea un índice
● ON nombre_tabla → tabla donde se aplica
● (columna1, columna2) → columna(s) sobre las que se crea el
índice
● Para eliminar un índice:
DROP INDEX nombre_indice;
3️⃣ Tipos de índices comunes en PostgreSQL
Tipo Uso principal
B-tree Consultas generales y
valores únicos;
predeterminado
Hash Igualdad exacta (=)
GIN Búsquedas en arrays o
textos (full-text search)
GiST Datos geométricos,
rangos o búsqueda de
proximidad
SP-GiST Datos espaciales o
jerárquicos, estructuras
especializadas
4️⃣ Beneficios
● Acelera SELECT con WHERE, ORDER BY, JOIN
● Mantiene integridad cuando se usan índices únicos (UNIQUE)
● Reduce tiempo de búsqueda, especialmente en tablas grandes
5️⃣ Consideraciones
● Crearlos consume espacio en disco
● Pueden ralentizar INSERT/UPDATE/DELETE, porque el índice
también debe actualizarse
💡 Tip rápido:
● Usa B-tree para la mayoría de consultas.
● Usa GIN o GiST para búsquedas de texto o datos espaciales.
● Usa índices únicos para garantizar que no haya duplicados.
🔹 Archivos de Registro (Logs) en PostgreSQL
1️⃣ Definición
Los logs son archivos donde PostgreSQL registra eventos y
actividades de la base de datos.
● Ayudan a diagnosticar problemas, auditar actividades y
monitorear rendimiento.
2️⃣ Qué se puede registrar
● Consultas SQL ejecutadas (SELECT, INSERT, UPDATE, DELETE)
● Mensajes de error o advertencia
● Conexiones y desconexiones de usuarios
● Actividad de transacciones
● Mensajes de mantenimiento y checkpoints
3️⃣ Parámetros de configuración importantes
Parámetro Función
logging_colle Habilita la recolección de logs en archivos.
ctor
log_directory Carpeta donde se almacenan los archivos de log.
log_filename Nombre de los archivos de log.
log_statemen Qué tipo de consultas se registran (none, ddl, mod,
t all).
log_min_mes Nivel mínimo de severidad para registrar (DEBUG,
sages INFO, WARNING, ERROR).
4️⃣ Ejemplo de configuración en [Link]
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%[Link]'
log_statement = 'all'
log_min_messages = warning
● Esto crea un archivo diario con todas las consultas y advertencias
a partir de “warning”.
5️⃣ Beneficios
● Permite auditar usuarios y acciones.
● Ayuda a detectar errores o cuellos de botella.
● Facilita el mantenimiento y análisis de rendimiento.
💡 Tip rápido:
● En producción, normalmente se registra solo errores y
advertencias, no todas las consultas, para no llenar disco
rápidamente.
● En desarrollo o debugging, se puede registrar todas las
consultas (log_statement = 'all') para seguimiento
detallado.
🔹 Parámetros de Funciones
Los parámetros son valores que se pasan a una función para que ésta
pueda realizar cálculos o acciones dinámicas.
1️⃣ Tipos de parámetros
Tipo Descripción
IN Parámetro de entrada. La función recibe el valor
pero no lo modifica. Es el tipo más común.
OUT Parámetro de salida. La función devuelve un
valor a través de este parámetro. Puede
haber varios.
INOUT Parámetro de entrada y salida. La función
puede recibir un valor y luego devolverlo
modificado.
●
Si no se especifica, PostgreSQL asume que es IN.
2️⃣ Sintaxis básica
● CREATE OR REPLACE FUNCTION nombre_funcion(
● parametro1 TIPO1,
● parametro2 TIPO2,
● ...
● )
● RETURNS TIPO_RETORNO AS $$
● BEGIN
● -- cuerpo de la función
● END;
● $$ LANGUAGE plpgsql;
● parametro1 TIPO1 → nombre y tipo del parámetro
● RETURNS TIPO_RETORNO → tipo de dato que devuelve la función
3️⃣ Ejemplo de función con parámetros
● CREATE OR REPLACE FUNCTION sumar(a INT, b INT)
● RETURNS INT AS $$
● BEGIN
● RETURN a + b;
● END;
● $$ LANGUAGE plpgsql;
● Aquí a y b son parámetros de entrada (IN).
● La función devuelve la suma de a + b.
4️⃣ Ejemplo con INOUT
● CREATE OR REPLACE FUNCTION incrementar_valor(INOUT x
INT)
● AS $$
● BEGIN
● x := x + 1;
● END;
● $$ LANGUAGE plpgsql;
● x se pasa como entrada y se devuelve incrementado como salida.
5️⃣ Consideraciones
● Los parámetros permiten generalizar funciones y reutilizar
código.
● Se pueden combinar varios parámetros IN, OUT y INOUT.
● El orden de los parámetros importa al llamarla, salvo que uses
named notation:
● SELECT sumar(b := 5, a := 3); -- nombre del parámetro explícito
💡 Tip rápido:
● Usá IN para recibir datos, OUT para devolver múltiples resultados,
INOUT para modificar y devolver un valor existente.
●
● 2️⃣ Bucles (Loops)
Tipo de loop Uso
LOOP…END LOOP Bucle infinito que se debe romper con
EXIT o RETURN.
WHILE condicion Ejecuta mientras la condición sea
LOOP verdadera.
FOR … IN Itera sobre un rango de números.
[REVERSE] …
LOOP
FOR … IN SELECT … Itera sobre filas de un conjunto de
LOOP resultados de una consulta.