Postgres ON DELETE CASCADE会在后续表上触发DELETE触发器吗?

时间:2012-03-29 18:51:42

标签: function postgresql triggers

ON DELETE CASCADE是否会在后续表上触发DELETE触发器?

我有三个表,结果,m_int和行计数。 M_int与FK的结果相关。结果具有ON DELETE CASCADE设置,m_int具有BEFORE DELETE的触发器。 Rowcount跟踪m_int中使用的行数和用户。

我的问题是,当我从结果中删除一行时,我希望DELETE CASCADE触发m_int上的触发器。有任何想法吗?我花了整个上午阅读文档,但找不到答案。

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)

1 个答案:

答案 0 :(得分:2)

CREATE TABLE手册会告诉您:

  

此外,当更改引用列中的数据时,将对此表的列中的数据执行某些操作。 ON DELETE子句指定在删除引用表中引用的行时要执行的操作。 [...]

是的,在results中删除也会在m_int中删除。 当然,这并不意味着,在m_int中删除会删除results中的任何内容。 您的其他触发器add_rows_m_intrem_rows_m_int做了什么或阻止了什么 - 我们不知道。

相关问题