如何在 prisma 管理的 postgresql 数据库上创建触发器?

2024-02-14

晚上好 。我正在使用nodejs、prisma、postgresql 开发一个聊天应用程序。我希望在特定聊天中创建最后一条消息后 24 小时内立即从 postgresql 数据库中删除。为此,我创建了一个触发器:

--function creation

create or replace function chat_expired() returns trigger as $delete_account$
begin 
delete from chat where current_timestamp - last.messages.createAt = 24*60*60;
return new;
end;
$delete_account$ language plpgsql ;

-- trigger creation

create trigger messages_added
after update 
on chat --I get error on this line
for each row 
execute procedure chat_expired();

来自 postgresql 查询工具,但是当我执行时,我收到错误 cat 关系在触发器定义级别不存在。我猜是因为我的查询工具空间中还没有定义聊天表;但我没有设置它,因为聊天表已经从 prisma Immigration 创建。所以我删除了 prisma 迁移的文件夹,然后创建了一个新的迁移并修改了.sql手动文件以便在那里插入我的触发器,因此认为 prisma 也会在与数据库表同时为我创建一个触发器: --函数创建

create or replace function "chat_expired"() returns trigger as $delete_account$
begin 
delete from "Chat" where current_timestamp - last.chatMessage.createdAt = 3*60;
return new;
end;
$delete_account$ language plpgsql ;

-- trigger creation

create trigger "messages_added"
after update 
on "chat" 
for each row 
execute procedure "chat_expired"();

注意:前面的代码比第一个代码多了一些引号。但它反而阻止了迁移的应用,我收到了错误

Error: P3006

Migration `20220905231003_initial_migration` failed to apply cleanly to the shadow database. 
Error code: P1014
Error:
The underlying table for model `(not available)` does not exist.

仅在我删除手动添加的行后才解决。所以我不知道如何在 prisma 管理的 postgresql 数据库上创建触发器。我已经思考解决方案好几个星期了。我什至看了这个堆栈溢出问题 https://stackoverflow.com/questions/54577418/create-a-trigger-with-postgresql并且this one https://stackoverflow.com/questions/17609165/how-to-create-a-trigger-in-postgresql但什么也没有。谢谢 !


Prisma 尚不支持触发器。棱镜有一个优秀的文章 https://www.prisma.io/dataguide/datamodeling/functional-units关于这个话题。他们建议写作Prisma中间件 https://www.prisma.io/docs/concepts/components/prisma-client/middleware达到“触发”的目的。还有一个功能要求 https://github.com/prisma/prisma/issues/905 for it.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 prisma 管理的 postgresql 数据库上创建触发器? 的相关文章

随机推荐