gpt4 book ai didi

postgresql - Postgres encode() 函数不适用于函数作为参数

转载 作者:行者123 更新时间:2023-11-29 11:44:08 27 4
gpt4 key购买 nike

我正在尝试使用 Postgresql encode() 函数并将其他一些函数作为参数。我收到错误,但我不明白为什么。

我在 Windows 上使用 Postgres 9.6.14。

  1. 这工作正常并返回 698d51a19d8a121ce581499d7b701668
select md5('111'); 
  1. 这也能正常工作并返回一些值
select encode('698d51a19d8a121ce581499d7b701668', 'base64');
  1. 但是这个结合了前两个的那个不起作用并返回 “错误:函数编码(文本,未知)不存在”
select encode(md5('111'), 'base64');
  1. 这也不起作用并返回相同的错误
select encode(concat('1', '11'), 'base64');
  1. 我认为有一条规则可以防止在另一个函数中使用一个函数,但下面的规则可以正常工作并返回与此处第一个请求相同的值,正如预期的那样。
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

在不起作用的查询中,您正在使用函数 md5concat,它们的结果类型都是 text。现在 textbytea 之间没有隐式转换,因此出现错误消息。

要实现这一点,您必须引入显式类型转换:

select encode(CAST(md5('111') AS bytea), 'base64');

关于postgresql - Postgres encode() 函数不适用于函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56886547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com