PostgreSQL:删除一行及其所有存在于其他表中的引用(FK)?

PostgreSQL: Delete a row and all of it's references (FK) existing in others tables?


假设我有一个名为 "users" 的 table,如下所示:

+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1  | 'Sid'      | 'Barrett' |
| 2  | 'Roger'    | 'Waters'  |
| 3  | 'Richard'  | 'Wright'  |
| 4  | 'David'    | 'Gilmour' |
| 5  | 'Nick'     | 'Mason'   |
+----+------------+-----------+

每个 "user" 都有很多关于几个 table 的引用,它们具有与 FK 相同的列名 "user_id"。
如果我需要删除一个元素,我相信程序是先删除关系(以避免 "violates foreign key constraint" 错误),然后是 "users" table 中的元素本身,对吗?

但是...是否有可能删除一个 "user" 元素及其对所有其他 table 的所有引用?
我正在使用 NodeJS (Express) 并使用 PostgreSQL。 如果答案很明显,请道歉,我是 SQL 的新手。

非常感谢指教!!

是的,在外键上使用 on delete cascade

create table users (
  id bigserial primary key
  ...
);

create table posts (
  ...
  user_id bigint not null references users on delete cascade
  ...
)

现在,当用户被删除时,其所有关联的 post 也将被删除。

这将继续,例如,如果 post 有评论...

create table comments (
  ...
  post_id biging not null references posts on delete cascade
  ...
)

当用户被删除时,他们的 posts 将被删除,那些 posts 的评论将被删除。那是 "cascade" 部分。