sql >> Database >  >> RDS >> PostgreSQL

postgresql:gegevenstype voor md5-berichtoverzicht?

De md5-hash als bytea gebruikt slechts 16 bytes in in plaats van 32 voor de hexa-representatie:

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

Beide vormen hierboven zullen werken, maar om de eenvoudigere digest te gebruiken functie is het nodig om de pgcrypto . te installeren extensie als supergebruiker:

create extension pgcrypto;

Gebruik de digest functie of de combinatie van decode en md5 zoals hierboven om naar een bepaalde tekenreeks te zoeken:

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

De pg_column_size waarde is de opslaggrootte. Het is minder dan de helft voor de bytea vergeleken met de hexa-weergave.



  1. Hoe dubbele rijen te verwijderen zonder unieke identificatie

  2. Proberen om een ​​Oracle te exporteren via PL/SQL geeft een datum van 0000-00-00

  3. pg -v 0.17.1 installeren

  4. Plezier met (columnstore) compressie op een hele grote tafel – deel 1