CodeGym /Cursos /SQL SELF /Introducción a PL/pgSQL

Introducción a PL/pgSQL

SQL SELF
Nivel 49 , Lección 0
Disponible

Introducción a PL/pgSQL

¡PostgreSQL no solo "habla" SQL! Te presento: PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language), un lenguaje de programación procedural que viene integrado en PostgreSQL. Está pensado para facilitar la ejecución de operaciones complejas usando consultas SQL y estructuras de control como condiciones (IF, CASE) y bucles (LOOP, FOR, WHILE).

PL/pgSQL y SQL son como una línea de montaje automatizada y una herramienta manual de toda la vida, como un martillo. SQL, como el martillo, es una herramienta fiable. Pero tienes que dar cada golpe tú mismo, uno por uno. En cambio, PL/pgSQL es como una línea de montaje automática: tú le dices una vez qué y cómo hacer las cosas, y luego todo va solo — ejecuta comandos, recuerda cosas, comprueba si algo va mal y sigue adelante sin dramas. ¿Para qué clavar cada clavo a mano si puedes ver cómo todo se hace solo? ¿No es el sueño de cualquiera?

Comparación de PL/pgSQL con consultas SQL normales

Vamos a ver en qué se diferencia PL/pgSQL de las consultas SQL simples.

SQL va genial cuando tienes que hacer una tarea concreta: por ejemplo, seleccionar todos los estudiantes de una tabla o añadir una nueva fila. Pero en cuanto necesitas lógica tipo "si pasa esto, haz esto otro" o repetir acciones, SQL empieza a quedarse corto.

Por ejemplo, imagina que necesitas:

  1. Comprobar si ya existe un registro del estudiante en la tabla.
  2. Si existe — actualizar los datos.
  3. Si no existe — añadir un nuevo registro.

Con SQL normal tendrías que escribir varias consultas y procesar el resultado en el lado del cliente. Con PL/pgSQL puedes meter todo eso en un solo procedimiento que se ejecuta directamente en la base de datos.

PL/pgSQL brilla en proyectos más complejos. Te permite:

  • guardar resultados intermedios en variables;
  • manejar errores para que la base de datos no "se caiga" si pasa algo raro;
  • usar bucles y condiciones para ejecutar algoritmos complicados.

Ámbitos de uso de PL/pgSQL

PL/pgSQL se usa un montón en estos casos:

  1. Automatización de tareas. Por ejemplo, crear registros automáticamente en el log cada vez que se actualizan datos.

  2. Lógica de negocio. Tienes una regla: cada estudiante con más de 5 ausencias debe marcarse automáticamente como "inactivo". ¿Por qué no meter esa regla en una función PL/pgSQL?

  3. Analítica e informes. En vez de estar moviendo datos entre la base de datos y la app del cliente, puedes agregarlos directamente en el servidor.

  4. Triggers. PL/pgSQL se usa para escribir triggers que ejecutan acciones automáticamente al insertar, actualizar o borrar datos.

Ejemplo de uso de PL/pgSQL

Aquí tienes un ejemplo de función que recibe dos números, los suma y devuelve el resultado:

CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
    RETURN a + b;
END;
$$ LANGUAGE plpgsql;

Explicación:

  • CREATE FUNCTION add_numbers(a INT, b INT) — estamos creando una función llamada add_numbers que recibe dos argumentos de tipo INT (número entero).
  • RETURNS INT — indica que la función devuelve un número entero.
  • BEGIN ... END — es el bloque principal donde va la lógica de la función.
  • RETURN a + b; — el resultado de la suma se devuelve.

Para llamar a esta función, solo tienes que usar una consulta SQL normal:

SELECT add_numbers(10, 20);

Resultado: 30.

Trampas y limitaciones

PL/pgSQL es una herramienta potente, pero hay que tener cuidado:

  • Rendimiento: funciones demasiado complejas pueden ralentizar la base. Siempre prueba y optimiza.
  • Testing: los errores en funciones pueden pasar desapercibidos hasta que las llamas. ¡No te olvides de los tests!
  • Legibilidad: funciones y procedimientos grandes con lógica complicada pueden ser difíciles de entender. Intenta escribir código que puedas entender dentro de un mes.

Ahora que ya sabes un poco qué es PL/pgSQL, vamos a hablar más sobre su sintaxis y funciones principales. Aprenderemos a crear bloques de código, declarar variables y trabajar con tipos de datos en las próximas lecciones. ¡Vamos a programar del lado de la base de datos!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION