Sve*_*ies 8 javascript sql supabase supabase-database
使用 Supabase 时,是否有一种干净/简单的方法可以删除所有关联记录以及某个项目?假设我有帖子,并且一个帖子可以有很多评论。当我删除帖子时,我也想删除评论。
基本上就像dependend: :destroy
Rails 中的东西。
const { data, error } = await supabase
.from('posts')
.delete()
.match({ id: 123 })
.options({ destroyDependent: true }) // set some option that tells Supabase to delete all associated records as well.
Run Code Online (Sandbox Code Playgroud)
dsh*_*tjr 17
就在这里!
\n魔法不是在您删除数据时发生,而是在您首次创建评论表时发生。它也不是 Supabase 功能,而是 postgres 功能。
\n创建外键约束时,您可以设置一个delete cascade
选项来告诉表删除任何相关数据。
例如,您可以创建如下评论表:
\ncreate table if not exists public.comments (\n id uuid not null primary key DEFAULT uuid_generate_v4 (),\n post_id uuid references public.posts on delete cascade not null,\n user_id uuid references public.users on delete cascade not null,\n created_at timestamp with time zone default timezone(\'utc\' :: text, now()) not null,\n text varchar(320) not null\n);\n
Run Code Online (Sandbox Code Playgroud)\n注意delete cascade
关键字 onpost_id
和user_id
定义。如果相关帖子或用户被删除,添加这些将删除评论条目。
目前,无法delete cascade
在 Supabase UI 中使用选项创建列,因此您必须使用 SQL 创建此类表。
另外,如果您已经有一个表并且想要添加此delete cascade
选项,则必须删除外键约束并使用delete cascade
选项重新添加它。您可以在此处了解有关如何添加delete cascade
到现有表的更多信息,但如果您的应用程序未投入生产,则删除表并从头开始重新创建可能会更容易!
如果您再滚动一点查看 @Justus Bl\xc3\xbcmer 的答案,您可以看到如何更改现有表以添加删除级联!
\n小智 10
根据泰勒的提示,以下是如何更改现有的键约束以允许级联删除。
SELECT con.*
FROM pg_catalog.pg_constraint con
INNER JOIN pg_catalog.pg_class rel
ON rel.oid = con.conrelid
INNER JOIN pg_catalog.pg_namespace nsp
ON nsp.oid = connamespace
WHERE 1=1
AND rel.relname = 'YOUR_CHILD_TABLE';
Run Code Online (Sandbox Code Playgroud)
child_parent_id_fkey
支持级联删除:ALTER TABLE public.YOUR_CHILD_TABLE
DROP CONSTRAINT child_parent_id_fkey,
ADD CONSTRAINT child_parent_id_fkey
FOREIGN KEY (parent_id)
REFERENCES YOUR_PARENT_TABLE(id)
ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9178 次 |
最近记录: |