我正在尝试使用Postgresql encode()函数,并将其他一些函数用作参数。我收到错误,但我不明白为什么。
我正在Windows上使用Postgres 9.6.14。
698d51a19d8a121ce581499d7b701668
select md5('111');
select encode('698d51a19d8a121ce581499d7b701668', 'base64');
"ERROR: function encode(text, unknown) does not exist"
select encode(md5('111'), 'base64');
select encode(concat('1', '11'), 'base64');
select md5(concat('1', '11'))
那么,请求号3和4以及encode()
的总体功能是什么?
答案 0 :(得分:3)
看看encode
的定义:
\df encode
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+------
pg_catalog | encode | text | bytea, text | func
(1 row)
第一个参数必须为bytea
,即二进制字节串。
您的前两个查询有效,因为字符串文字的类型为unknown
,可以将其隐式转换为bytea
。
在不起作用的查询中,您正在使用函数md5
和concat
,它们的结果类型均为text
。现在text
和bytea
之间没有隐式强制转换,因此出现错误消息。
要使其工作,必须引入一个显式的类型转换:
select encode(CAST(md5('111') AS bytea), 'base64');