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.