sql >> Databáze >  >> RDS >> PostgreSQL

postgresql:datový typ pro md5 message digest?

Hash md5 jako bytea bude pro hexa reprezentaci používat pouze 16 bajtů namísto 32:

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

Oba výše uvedené formuláře budou fungovat, ale použije se jednodušší digest funkce je nutné nainstalovat pgcrypto rozšíření jako superuživatel:

create extension pgcrypto;

Použijte digest funkce nebo kombinace decode a md5 jako výše pro hledání určitého řetězce:

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

pg_column_size hodnota je velikost úložiště. U bytea je to méně než polovina ve srovnání s hexa reprezentací.



  1. Jak používat parametr s LIKE v SQL Server Compact Edition

  2. Jedinečné omezení, které umožňuje prázdné hodnoty v MySQL

  3. Připojte se k databázi PostgreSQL na kontejneru Docker

  4. Protože SQL Server nemá balíčky, co dělají programátoři, aby to obešli?