PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

postgresql :type de données pour le résumé de message md5 ?

Le hachage md5 sous la forme bytea n'utilisera que 16 octets au lieu de 32 pour la représentation hexa :

create table t (d bytea);
insert into t (d) values
    (digest('my_string', 'md5')),
    (decode(md5('my_string'), 'hex'));

Les deux formulaires ci-dessus fonctionneront, mais pour utiliser le plus simple digest fonction il faut installer le pgcrypto extension en tant que superutilisateur :

create extension pgcrypto;

Utilisez le digest fonction ou la combinaison de decode et md5 comme ci-dessus pour rechercher une certaine chaîne :

select
    octet_length(d) ba_length,
    pg_column_size(d) ba_column,
    encode(d, 'hex') hex_representation,
    octet_length(encode(d, 'hex')) h_length,
    pg_column_size(encode(d, 'hex')) h_column
from t
where d = digest('my_string', 'md5')
;
 ba_length | ba_column |        hex_representation        | h_length | h_column 
-----------+-----------+----------------------------------+----------+----------
        16 |        17 | 3d212b21fad7bed63c1fb560c6a5c5d0 |       32 |       36
        16 |        17 | 3d212b21fad7bed63c1fb560c6a5c5d0 |       32 |       36

Le pg_column_size value est la taille de stockage. C'est moins de la moitié pour le bytea par rapport à la représentation hexa.