Function DELETE-CASCADE上的Postgres是否会触发后续表上的DELETE触发器?
在后续的表上,删除级联会触发删除触发器吗 我有三个表:results、m_int和row count。M_int与带有FK的结果相关。结果在DELETE CASCADE集合上具有,并且m_int在DELETE之前具有触发器。Rowcount跟踪m_int中使用了多少行以及由哪个用户使用 我的问题是,当我从结果中删除一行时,我希望删除级联在m_int上触发触发器。有什么想法吗?我花了一上午的时间阅读文档,却找不到答案Function DELETE-CASCADE上的Postgres是否会触发后续表上的DELETE触发器?,function,postgresql,triggers,Function,Postgresql,Triggers,在后续的表上,删除级联会触发删除触发器吗 我有三个表:results、m_int和row count。M_int与带有FK的结果相关。结果在DELETE CASCADE集合上具有,并且m_int在DELETE之前具有触发器。Rowcount跟踪m_int中使用了多少行以及由哪个用户使用 我的问题是,当我从结果中删除一行时,我希望删除级联在m_int上触发触发器。有什么想法吗?我花了一上午的时间阅读文档,却找不到答案 peri=> \d results
peri=> \d results
Table "public.results"
Column | Type | Modifiers
-----------+---------+-----------------------------------------------------
result_id | integer | not null default nextval('result_id_seq'::regclass)
trial__id | integer | not null
title | text |
Indexes:
"results_pkey" PRIMARY KEY, btree (result_id)
Referenced by:
TABLE "m_int" CONSTRAINT "m_int_result__id_fkey" FOREIGN KEY (result__id) REFERENCES results(result_id) ON DELETE CASCADE
peri=> \d m_int
Table "public.m_int"
Column | Type | Modifiers
------------+---------+------------------------------------------------------------
metric__id | integer | not null
result__id | integer | not null
value | integer | not null
m_value_id | bigint | not null default nextval('m_int_m_value_id_seq'::regclass)
Indexes:
"m_int_pkey" PRIMARY KEY, btree (m_value_id)
Foreign-key constraints:
"m_int_metric__id_fkey" FOREIGN KEY (metric__id) REFERENCES metrics(metric_id) ON DELETE CASCADE
"m_int_result__id_fkey" FOREIGN KEY (result__id) REFERENCES results(result_id) ON DELETE CASCADE
Triggers:
addrows_m_int AFTER INSERT ON m_int FOR EACH ROW EXECUTE PROCEDURE add_rows_m_int()
remrows_m_int BEFORE DELETE ON m_int FOR EACH ROW EXECUTE PROCEDURE rem_rows_m_int()
peri=> \d rowcount
Table "public.rowcount"
Column | Type | Modifiers
------------+---------+-----------
user__id | integer | not null
table_name | text | not null
total_rows | bigint |
Indexes:
"rowcount_pkey" PRIMARY KEY, btree (user__id, table_name)
的手册将告诉您:
此外,当引用列中的数据发生更改时,将对此表列中的数据执行某些操作。ON DELETE子句指定删除被引用表中的被引用行时要执行的操作。[……]
因此,是的,在results
中删除也将在muint
中删除。
当然,这并不意味着在m_int
中删除会删除结果中的任何内容。
以及你的额外触发器<代码> AddiyRoSsMyIt和<代码> ReMyRoSsMyIt/<代码>做或阻止-我们不知道。如果触发不是FiffDI,我会认为它是一个大错误。我的触发器需要一个旧的.m_value_id,它存在于m_int表中,但不存在于results表中。将删除发送到结果时,级联删除将没有旧的.m_值_id,因此触发器将无法工作。它可能会开火,但我没有结果。我将尝试用另一种方法来减少我的行数表。一个没有名字的马,有趣的是,今天我读了关于MySQL的以下内容:“MySQL触发器也不会被级联更新和删除激活,即使是由SQL语句引起的(这是违反标准的)”@strkol:MySQL有很多功能已经被破坏或者从未完全实现过。将MySQL作为关系DBMS如何工作的参考是一个坏主意。与其显示表定义,不如向我们显示触发器定义。我猜你的扳机出了错误。