postgresql 从varchar/text列生成Postgres中的sha 256列?

wgx48brx  于 2023-02-15  发布在  PostgreSQL
关注(0)|答案(1)|浏览(204)

我尝试在PostgreSQL 13中创建以下表格:

CREATE TABLE cached (
  text VARCHAR NOT NULL,
  text_hash BYTEA GENERATED ALWAYS AS (sha256(convert_to(text, 'LATIN1'))) STORED PRIMARY KEY
);

但是,我得到了以下错误:
生成表达式不是不可变的
我猜这是因为convert_to不是不可变的。我该如何解决这个问题呢?有没有一种方法可以将text列转换为bytea列?
我宁愿避免的事情:
1.转换为text::bytea。它不会像here解释的那样正确工作。
1.使用触发器。

pprl5pva

pprl5pva1#

CREATE OR REPLACE FUNCTION cripto(TEXT )
RETURNS TEXT AS 
$function$
DECLARE tText TEXT ; 

BEGIN
SELECT sha256(convert_to($1, 'LATIN1')) INTO tText;
RETURN tText ;

END ;
$function$ 
IMMUTABLE
LANGUAGE plpgsql ; 

CREATE TABLE cripto(
text TEXT , 
text_hash TEXT GENERATED ALWAYS AS ( cripto(text) ) STORED PRIMARY KEY 
);

相关问题