晚上好 。我正在使用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但什么也没有。谢谢 !