PostgreSQL es un sistema de bases de datos opensource, tiene más de 15 años de desarrollo y hoy en día es uno de los motores más poderosos y flexibles para utilizar con cualquier tipo de plataforma. En este post explicamos 5 tips sencillos pero que tal vez no sabías de este motor de bases de datos.
En esta entrada vamos a ver 5 funciones que tal vez no sabías que se podían hacer con PostgreSQL pero que al saber cuándo y dónde utilizarlas nos puede simplificar el desarrollo de nuestras aplicaciones.
1. Un único query que retorne datos asociados de otra tabla.
Por ejemplo, listado de usuarios y los intereses de cada uno (que se encuentan en otra tabla)
Funciones: array_agg y array_to_string
select u.nombre, u.apellido
,(select array_to_string(array_agg(intereses),’,’) from usuario_interes where usuario_id = u.usuario_id) as intereses
from usuario u
Retorna los intereses como: “futbol,basket,tenis”
2. Obtener la cantidad total de registros afectados en un LIMIT sin necesidad de realizar otro query count(*).
Ideal para paginación de resultados, pudiendo colocar el total general de registros, más allá del total de cada página.
Función: OVER()
select nombre, apellido, count(*) OVER() as total
from usuarios
limit 10 offset 30
3. Obtener un valor determinado sobre un listado de elementos separados por un caracter común.
función: split_part
select split_part(‘a,b,c,d’, ‘,’ , 2);
Resultado: “b”
Ideal para parsear campos en donde se mantiene alguna normalización que permita obtener algún dato en particular. Por dar un ejemplo, un número telefónico separado por “-“, se puede obtener por un lado la característica y por otro la numeración.
4- Formateo de fechas y retornarlas en el uso horario correspondiente.
Cuando utilizar now() o current_timestamp para obtener la fecha del sistema, esta se va a guardar en el formato horario del servidor, que seguramente va a ser diferente al nuestro
select to_char(fecha_creacion AT TIME ZONE ‘-03:00′, ‘DD/MM/YYYY’) as fecha
from usuario
5- Como usar FullText Index, para realizar búsquedas ágiles y contextuales.
Útil para realizar un única búsqueda y que esta se realize en muchos campos, sin necesidad de utilizar un like por cada campo. Además la performance utilizando fulltext es muy buena y se puedan agregar lógica en las búsquedas.
Crear un campo en la tabla que contengan todos los valores por lo que se quiere ubicar el registro.
search varchar(512);
Crear un campo tsvector para poder indexar el contenido.
textsearchable_index tsvector;
Luego cada vez que se inserta o se actualizan los datos se debe realizar lo siguiente
UPDATE usuario set search = coalesce(nombre,”) || ‘ ‘ || coalesce(apellido,”) || ‘ ‘ || coalesce(email,”);
UPDATE usuario SET textsearchable_index = to_tsvector(search);
Para realizar las búsquedas se debe utilizar
select *
from usuario
where textsearchable_index @@ to_tsquery(‘Juan’)select *
from usuario
where textsearchable_index @@ to_tsquery(‘Juan & Perez’)select *
from usuario
where textsearchable_index @@ to_tsquery(‘Jua:*’)