Postgres:我可以绕过错误"cannot insert into generated column"使用PostgreSQL而不是插入规则吗?



我知道这不太好,但在Postgres中绕过插入生成列的错误会很有帮助。比方说,我们有一张这样的桌子:

create table testing (
id int primary key,
fullname_enc bytea,
fullname text generated always as (pgp_sym_decrypt(fullname_enc, 'key')) stored
);

如下查询返回预期错误:ERROR: cannot insert into column "fullname" DETAIL: Column "fullname" is a generated column.

insert into testing(id, fullname) values (3, 'John Doe');

我想在INSERT上的这个表上创建一个规则,比如:

create rule encrypter as on insert to testing DO INSTEAD insert into testing (id, fullname_enc) values (new.id, pgp_sym_encrypt(new.fullname, 'key'));

由于我们重写了查询,我天真地想,如果这不会导致引擎的错误,但它仍然会。你知道这是怎么实现的吗?

问这个问题的原因是迁移到PostgreSQL 12。

这是不可能实现的,如果能以某种方式实现,那将是一个需要修复的错误。否则,从转储中恢复会更改值。

我认为您需要的是一个设置fullnameBEFORE触发器。

我希望这是一个模拟的例子,而不是为了提高安全性。

在迁移数据库时,可以省略";总是生成为";并在迁移完成后替换它。

最新更新