【发布时间】:2021-04-23 09:58:18
【问题描述】:
当我在 Postgres 中调用 sha256('abc') 函数时,它会将传递值的散列返回为 bytea 作为该函数的结果。
SELECT sha256('abc'); -- Works as expected
但是,当我有一个自定义函数接受 text 作为输入参数并在该函数中执行完全相同的操作时:
CREATE OR REPLACE FUNCTION hash_text(input text) RETURNS bytea
LANGUAGE plpgsql
AS
$$
DECLARE
res bytea;
BEGIN
SELECT sha256(input) INTO res;
RETURN res;
END
$$
-- Executing the function above
SELECT hash_text('abc');
我收到以下异常:
SQL 错误 [42883]: 错误: 函数 sha256(text) 不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 其中:PL/pgSQL 函数 hash_text(text) 第 5 行的 SQL 语句
我查看了官方docs,似乎sha256 正在接受bytea 作为输入参数。让我感到困惑的是,当我直接传递 'abc' 值时它有效,但当该值通过函数参数时它不起作用?让我感到困惑的第二件事是,为什么当我在该函数中转换 input::bytea 时会产生不同的结果?我在这里错过了什么?
我对 Postgres 有点陌生,所以我可能会遗漏一些明显的东西。
【问题讨论】:
标签: postgresql sha256