Trabajando con unidades de medida en PostgreSQL

En ocasiones necesitamos realizar algunas operaciones o  conversiones con unidades de medidas, lo cual puede ser un poco engorroso pues se tienen que hacer casteos, concatenaciones o fórmulas matemáticas, por ejemplo:

Tenemos un atributo que almacena el valor en bytes:

CREATE TABLE bytes (i int8);
INSERT INTO bytes VALUES(2000), (3000), (40000);

Necesitamos mostrar el valor en kB y además con la unidad de medidas, pues diran es simple, se castea a numeric,  se divide entre 1024, se redondea, se convierte a texto, y se concatena con ‘kB’

select round((i::numeric/1024),2)::text || 'kB' as en_Kb from bytes ;
en_kb
 ---------
 1.95kB
 2.93kB
 39.06kB
(3 rows)

Y si por casualidad se tiene almacenado el valor en texto como por ejemplo ‘1000 B’ como mil bytes, es un dolor de cabeza hacer la conversión, el casteo u operaciones matemáticas 😦

postgresql-unit al rescate

Sigue leyendo

Introducción e instalación de pgadmin 4

Hace unos meses estaba siguiendo el desarrollo de pgadmin4 con las noticias publicadas por Dave Page, el cual es parte del equipo desarrolladores de pgadmin y la versión 4 se liberó hace muy poco. En realidad había probado el pgadmin4 en sus versiones betas con mi amiga y colega(Francis :-P), pero ahora que ya está liberado le vamos a echar una mirada un poco más profunda y sobre todo pues una amiga(Gabriela) me escribió y me dijo que había visto el pgadmin4 y que le gustaba (muy bien por ella).

Primero que todo comentaré que es una versión WEB y desarrollada en python(flask) y que su sitio de documentación en la versión 1.x es este

Bueno a instalar y probar  a ver que tal, de paso se usará con PostgreSQL 9.6 que es la versión más reciente de motor

Instalación en Centos 7.2 Sigue leyendo

Tipo de dato UUID en PostgreSQL

Aunque el tipo de dato UUID existe en PostgreSQL desde la versión 8.3, a veces los desarrolladores no lo utilizan mucho y prefieren usar Serial para generar PK o codificar el UUID en texto, desconociendo las utilidades y ventajas de usar UUID nativo, sobre todo en el tema de espacio como lo muestra en este blog. En esta entrada veremos algunas características y funciones para trabajar con dicho tipo de dato en PostgreSQL.

Para conocer generalidades de lo que es UUID en PostgreSQL puede ver en la documentación,

Ejemplos de uso y funciones:

Sigue leyendo

JSONB un JSON superior en PostgreSQL– parte 2

En una entrada previa les comentaba sobre el tipo de datos JSONB en PostgreSQL, y de las ventajas que tiene sobre JSON, resulta que la versión 9.5 de PostgreSQL liberó varias funcionalidades nuevas con este novedoso tipo de dato en los motores relacionales de bases de datos, entre las que figuran están los nuevos operadores y funciones:

 

Operator Description
|| Concatenate two jsonb values into a new jsonb value
-(text) Delete key/value pair or string element from left operand. Key/value pairs are matched based on their key value.
-(int) Delete the array element with specified index (Negative integers count from the end). Throws an error if top level container is not an array.
#- Delete the field or element with specified path (for JSON arrays, negative integers count from the end)

Veamos como funcionan estos nuevos operadores

Sigue leyendo

pg_recall, extesión para leer datos modificados de una tabla

Hace un tiempo se publicó una entrada que le permitía leer filas “sucias” en PostgreSQL, es decir filas que han sido modificadas o eliminadas sin que se les haya realizado VACCUM a la tabla. Siguiendo con el mismo tema de leer datos de una tabla que han sido modificados, les quiero mostrar una extensión llamada pg_recall realizada y mantenida por Manuel Reithuber, que la misma lo que realiza es llevar un registro de los datos de las tablas en el tiempo, lo que nos permite por  ejemplo, consultar la tabla X hace 5 minutos atrás. Pues  a ver que tal funciona:

Primero la descargamos de aqui Sigue leyendo

Leer filas borradas o actualizadas en PostgreSQL

Hace un tiempo lei sobre una extensión llamada pg_dirtyread, que como su nombre indica te permite leer datos sucios de una tabla  que aun no se le ha realizado vaccum, recuerden que el vaccum elimina o permite reutilizar es espacio de las  tuplas muertas, realmente no la había probado, pero me decidí hacerlo ahora luego de mucho tiempo para ver que tal. En realidad hay que tener claro que  es solo leer datos que han sido eliminados o actualizados y que aun no has realizado vaccum en esa tabla, también aclarar que puede generar “INCONSISTENCIA EN LA BD”, pero en el algunos casos puede ser útil, pues probemos que tal funciona:

Se descarga de  aquí la extensión

Sigue leyendo

Seguridad por Filas en PostgreSQL 9.5 (Row Level Security)

Si como ven el título se puede lograr el Row Level Security (RLS) desde PostgreSQL 9.5, fascinante esta funcionalidad, quedaron atrás los trucos con las vistas para lograr el RLS en PostgreSQL, para ver la documentación puede visitar aquí

 

La sitanxis básica es:

CREATE POLICY name ON table_name [ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ] [ TO { <trole_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ] [ USING ( using_expression> ) ] [ WITH CHECK ( check_expression ) ]

Sigue leyendo