DALL·E 2024 02 08 20.42.16 Create a WordPress featured image for a blog post titled How to Display the Encoded Byte Sequence of a Varchar Column in PostgreSQL. The image shoul

Cómo mostrar la secuencia de bytes codificada de una columna varchar en PostgreSQL

Si trabajas con PostgreSQL probablemente has estado en la situación de necesitar inspeccionar la secuencia de bytes de una columna varchar.

En ocasiones, algunos caracteres introducidos en estas columnas pueden no estar en un formato visual cómodo, como la «ñ», la «ç» o un juego de caracteres menos utilizado.

En este artículo te mostramos una posible solución para mostrar la secuencia de bytes correspondiente a una cadena de texto en PostgreSQL.

Paso 1 – Preparar el entorno

Para mostrar la secuencia de bytes en PostgreSQL puedes utilizar la siguiente función en SQL. Antes de eso, necesitas crear una tabla y rellenar la columna «description» con texto codificado:

CREATE TABLE varchar_demo(description varchar(200));

INSERT INTO varchar_demo VALUES('こんにちは');

INSERT INTO varchar_demo VALUES('ABCDE');

SELECT * FROM varchar_demo;

En la consola se vería lo siguiente:

description 

-------------

 こんにちは

 ABCDE

(2 rows)

Paso 2 – Cómo mostrar la secuencia de bytes

Para mostrar esta secuencia nos valdremos de la función dump():

CREATE OR REPLACE FUNCTION dump(columnname TEXT, tablename TEXT,

                                rowid INT) RETURNS TEXT

LANGUAGE plpgsql

AS

$function$

DECLARE 

  hex_str TEXT;

  hex_byte TEXT;

  query TEXT;

  i INT;

  len INT;

BEGIN

  query := format('SELECT octet_length(%I) FROM %I offset %s

                   LIMIT 1', columnname, tablename, rowid);

  EXECUTE query INTO len;

  hex_str := 'Len=' || len || ' ';

  FOR i in 1..len LOOP

    query := format('SELECT to_hex(get_byte(%I::bytea, %s)) 

                     FROM %I offset %s LIMIT 1', 

                     columnname, i - 1, tablename, rowid);

    EXECUTE query INTO hex_byte;

    hex_str := hex_str || hex_byte || ',';

  END LOOP;

  RETURN hex_str;

END;

$function$;

Una vez definida la función en SQL, simplemente debes hacer una llamada pasando como parámetros el nombre de la columna, el nombre de la tabla y el índice de la fila:

select dump('description', 'varchar_demo', 0);

En la consola se vería lo siguiente:

dump                         

---------------------------------------------------

 Len=15 e3,81,93,e3,82,93,e3,81,ab,e3,81,a1,e3,81,af,

(1 row)

Lo que ves es la secuencia de bytes correspondiente a la primera fila de la tabla «varchar_demo».

Importante: Recuerda que el índice de la fila empieza en cero y que la función «dump()» te ofrece el número total de bytes en la secuencia (Len=15) y una secuencia de bytes separados por comas.

Notas finales

Si quisieras ver la secuencia de bytes en su correspondiente formato (en nuestro ejemplo con los carácteres japoneses), puedes utilizar una página de conversión como esta. Simplemente copia el valor de la secuencia de bytes en la página y se convertirá en el texto original.

Únete a la lista de emails para no perderte nada

No tengo ningún producto, publicidad, ni nada que venderte. De hecho, aún no tengo nada que hacer con estos emails. Pero si te interesa estar en contacto o no perderte las próximas actualizaciones en el futuro… Ya sabes 😉

    ¿Quieres trabajar con nosotros?

    Ya sea que necesites mejorar el rendimiento de consultas existentes, planificar y ejecutar migraciones de datos críticas, diseñar bases de datos desde cero o mantener un entorno de base de datos estable, estamos aquí para ayudarte.

    Trabajamos con una amplia variedad de sistemas de gestión de bases de datos (DBMS) y estamos comprometidos en proporcionar soluciones adaptadas a tus necesidades específicas. Puedes consultar nuestra lista completa de servicios aquí.

    Confía en nosotros para optimizar tus bases de datos y liberar tiempo y recursos para que puedas concentrarte en lo que realmente importa: hacer crecer tu negocio.

    ¡Contáctanos hoy mismo y descubre cómo podemos ayudarte a lograr un rendimiento óptimo en tu entorno de bases de datos!


    Comentarios

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *