我正在使用Postgres 9.5,似乎我很容易错过一些东西,但我无法应用我的触发功能。
我有一张表list_items
,其中包含列表和相应的项目及其位置,即:
-------------------------
id | list | item | pos (for position)
--------------------------
--------------------------
list
和item
只是与其自己的表对应的ID的外键,id
只是一个串行主键。
位置pos
对于某个列表对应的项目是唯一的(即UNIQUE(list,item,pos))
用户可以更改或删除列表中某些项目的位置,我需要有一个触发器,以便在更新或删除时重新排序所有其他受影响项目的位置。
例如,如果列表L有6个项目{1}从1到6,如果我删除了pos
= 3的项目,我需要重新排序' pos'对于L中的项目从4 - 6变为3 - 5,如果我使用UPDATE将exmaple的pos
从5更改为3,我需要将项目3,4重新排序为4,5。
以下是我的触发功能
pos
问题在于每当我执行UPDATE或DELETE操作时,什么都不会发生! (对于DELETE,删除指定的行但不应用触发器)
答案 0 :(得分:1)
你有两个触发器。第一个运行一个更新某些行的函数。第二个还运行一个更新某些行的函数。
每当更新行时,将运行第二个函数。
这包括 触发器更新行的时间。
从这个角度重新评估你的功能,看看它是否符合你所看到的。
另外,您可能会发现RAISE NOTICE对于显示每个功能正在做什么很有用。