Postgres encode() 函数不适用于函数作为参数
Postgres encode() function doesn't work with a function as an argument
我正在尝试使用 Postgresql encode() 函数并将其他一些函数作为参数。我收到错误,我不明白为什么。
我在 Windows 上使用 Postgres 9.6.14。
- 这很好用 returns
698d51a19d8a121ce581499d7b701668
select md5('111');
- 这也很好用 returns 一些值
select encode('698d51a19d8a121ce581499d7b701668', 'base64');
- 但是这个结合了前两个的那个不起作用,returns
"ERROR: function encode(text, unknown) does not exist"
select encode(md5('111'), 'base64');
- 这也不行,returns同样的错误
select encode(concat('1', '11'), 'base64');
- 我认为有一个规则可以防止在另一个函数中使用一个函数,但下面的规则工作正常并且returns与这里的第一个请求相同的值,正如预期的那样。
select md5(concat('1', '11'))
那么 3 号和 4 号请求以及 encode()
整体功能有什么问题?
看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');
我正在尝试使用 Postgresql encode() 函数并将其他一些函数作为参数。我收到错误,我不明白为什么。
我在 Windows 上使用 Postgres 9.6.14。
- 这很好用 returns
698d51a19d8a121ce581499d7b701668
select md5('111');
- 这也很好用 returns 一些值
select encode('698d51a19d8a121ce581499d7b701668', 'base64');
- 但是这个结合了前两个的那个不起作用,returns
"ERROR: function encode(text, unknown) does not exist"
select encode(md5('111'), 'base64');
- 这也不行,returns同样的错误
select encode(concat('1', '11'), 'base64');
- 我认为有一个规则可以防止在另一个函数中使用一个函数,但下面的规则工作正常并且returns与这里的第一个请求相同的值,正如预期的那样。
select md5(concat('1', '11'))
那么 3 号和 4 号请求以及 encode()
整体功能有什么问题?
看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');