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:

Creamos una tabla:

--Creamos una tabla:

CREATE TABLE datos_uuid (
id uuid PRIMARY KEY,
nombre character varying);
--Insertamos datos
 INSERT INTO datos_uuid (id,nombre) VALUES ('A378F7E1-94AD-432E-9DB1-41BADDBDAE8F','Anthony');
 INSERT INTO datos_uuid (id,nombre) VALUES ('B000F8E4-9eAD-432E-9dB1-4199DDBDbE8d','Pepe');

Se pueden insertar las letras del UUID en MAYÚSCULAS o minúscula, PostgreSQL internamente las convierte a minúscula, pero para los desarrolladores eso es transparente, se pueden hacer operaciones como lo requiera, por ejemplo:

SELECT * FROM datos_uuid WHERE id = 'A378F7E1-94AD-432E-9DB1-41BADDBDAE8F';
 id | nombre 
--------------------------------------+---------
 a378f7e1-94ad-432e-9db1-41baddbdae8f | Anthony
(1 fila)

SELECT * FROM datos_uuid WHERE id = 'a378f7E1-94AD-432E-9DB1-41BaddBDAE8f';
 id | nombre 
--------------------------------------+---------
 a378f7e1-94ad-432e-9db1-41baddbdae8f | Anthony
(1 fila)

Como ven se pueden hacer búsquedas en MAYÚSCULAS o minúsculas, y los operadores de comparación que se puede utilizar son los clásicos: =, <>, <, >, <=,>=.

SELECT * FROM datos_uuid WHERE id <> 'a378f7e1-94ad-432e-9db1-41baddbdae8f';
 id | nombre 
--------------------------------------+--------
 b000f8e4-9ead-432e-9db1-4199ddbdbe8d | Pepe
(1 fila)

SELECT * FROM datos_uuid WHERE id >= 'a378f7e1-94ad-432e-9db1-41baddbdae8f';
 id | nombre 
--------------------------------------+---------
 a378f7e1-94ad-432e-9db1-41baddbdae8f | Anthony
 b000f8e4-9ead-432e-9db1-4199ddbdbe8d | Pepe
(2 filas)

Para generar los UUID, se puede hacer desde una API o biblioteca en su aplicación o desde dentro de PostgreSQL, utilizando para esto la extensión uuid-ossp, la cual tiene un conjunto de funciones para generar dicho tipo de dato, cada una con sus particularidades y forma de obtener el valor

CREATE EXTENSION "uuid-ossp";

SELECT uuid_generate_v1(), uuid_generate_v1mc(), uuid_generate_v4();
 uuid_generate_v1 | uuid_generate_v1mc | uuid_generate_v4 
--------------------------------------+--------------------------------------+--------------------------------------
 efaa3222-4cf5-11e6-bb35-dc4a3e06bf2c | efaa6b98-4cf5-11e6-bb35-13bf393ebbb4 | 4d585840-bd3c-4adb-b168-768dadfef784
(1 fila)


--insertar un dato en la tabla usando una de las funciones
INSERT INTO datos_uuid (id,nombre) VALUES (uuid_generate_v4(),'Juan') returning id ;
 id 
--------------------------------------
 66d432a0-90f6-4fe0-8ee9-b50db6274308
(1 fila)

INSERT 0 1

Pero si deseamos que auto-genere el valor debemos definir el DEFAULT del campo con unas de la funciones que genera UUID:


CREATE TABLE datos_uuid_auto (
 id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
 nombre character varying  ); 

INSERT INTO datos_uuid_auto (nombre) VALUES ('Automatico') returning id ;
 id 
--------------------------------------
 90337376-77e9-4630-b731-d8b68e24fc74
(1 fila)

INSERT 0 1

También este tipo de dato permite indexar, lo cual puede traer mejor rendimiento en las búsquedas:


CREATE INDEX idx_uuid_datos ON datos_uuid  (id);

Bueno y hasta aquí la entrada sobre UUID, lo cual muestra que PosgreSQL posee soporte para este tipo de dato el cual puede resultar desconocido para varios, pero es muy útil en algunos escenarios y que esta disponible de la versión 8.3, año 2008

Nos vemos en otra 😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s