postgresql 如何在多个表中插入新行?

kmbjn2e3  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(172)

我有一个supplyplpgsql数据库与10表.我也有auth.users.我试图写一个函数,将插入一个新的行在每一个10公共.tables当一个新用户注册.我已经使用了安全定义器,并有一个功能正常工作,但它只允许我插入到public.table1,如果我试图添加其他公共表的功能,那么它失败.
我把所有的RLS都设置为allowAll,我也试过两个单独的函数,两个函数都使用auth.user表中的触发器,一个写public.table1,另一个写public.table2,但是似乎什么都不起作用。我对plpgsql不太熟悉,所以如果有人能告诉我写代码的正确方法,我现在所做的工作,但只有一个公共表插入如下所示

Begin
      Insert into    public.tableone(id)
Values (new.id);
Returns new;

字符串
我相信还有其他方法可以做到这一点,例如CTE,但我不能正确地编写代码。我是初学者,所以请对我放松。

ruoxqz4g

ruoxqz4g1#

如果所有插入到其他表中的都是新ID,则不需要CTE。

-- trigger function
CREATE OR REPLACE FUNCTION public.trg_users_insert_after()
  RETURNS trigger
  LANGUAGE plpgsql AS
$func$
BEGIN
   INSERT INTO public.tableone(id) VALUES (NEW.id);
   INSERT INTO public.tabletwo(id) VALUES (NEW.id);
-- more?   

   RETURN NULL;  -- note correct syntax!
END
$func$;

-- trigger
CREATE TRIGGER my_trigger
AFTER INSERT ON public.users
FOR EACH ROW EXECUTE FUNCTION public.trg_users_insert_after();

字符串
在Postgres 11之前的旧版本中,使用旧的(误导性的)语法:

...
FOR EACH ROW EXECUTE PROCEDURE ...


相关:

  • 从触发器中释放出来没有发生?

相关问题