我想使用某些字符串的MD5消息摘要作为表的主键.我应该为这样的字段使用什么数据类型?我应该为该字段写什么选择和插入语句?
作为bytea的md5散列将仅使用16个字节而不是32个用于hexa表示:
create table t (d bytea); insert into t (d) values (digest('my_string','md5')),(decode(md5('my_string'),'hex'));
上面的两种形式都可以使用,但是要使用更简单的摘要功能,必须以超级用户身份安装pgcrypto扩展:
create extension pgcrypto;
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值是存储大小.与hexa表示相比,bytea小于一半.