postgresql 在Postgres中,我可以手动触发插入前功能来插入已经插入的记录吗?

tp5buhyn  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(115)

我使用的是PostgreSQL 14.5
我有一个beneficiaries表,其中注册了人员,我有BEFORE INSERT触发器函数,该函数根据人员的位置(如果是巴黎- PAR-001,如果是伦敦- LON-004,等等)生成唯一的ID,它可以工作。
但问题是,在编写此函数之前插入了大量记录,并且由于此函数是由BEFORE INSERT触发的,因此我无法为它们使用ID
我看过documentation,之前的记录没有发现怎么触发这个功能
是否可以一次手动触发所有记录的此功能或任何其他解决方案?

fnx2tebb

fnx2tebb1#

添加如下所示的附加触发器:

CREATE TRIGGER temp BEFORE UPDATE ON tab
   FOR EACH ROW WHEN (OLD.id IS NULL)
   EXECUTE FUNCTION your_trigger_func();

trigger函数是BEFORE INSERT触发器中使用的函数,然后更新所有这些行:

UPDATE tab SET id = id WHERE id IS NULL;

完成后可以放下触发器。
您可以分批执行更新,并在其间对表运行VACUUM,以避免单个大规模更新造成的膨胀。

相关问题