重新排序未应用的唯一列的触发器功能

时间:2016-10-18 13:36:27

标签: sql postgresql

我正在使用Postgres 9.5,似乎我很容易错过一些东西,但我无法应用我的触发功能。

我有一张表list_items,其中包含列表和相应的项目及其位置,即:

-------------------------
id | list | item | pos (for position) 
--------------------------
--------------------------

listitem只是与其自己的表对应的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,删除指定的行但不应用触发器)

1 个答案:

答案 0 :(得分:1)

你有两个触发器。第一个运行一个更新某些行的函数。第二个还运行一个更新某些行的函数。

每当更新行时,将运行第二个函数。

这包括 触发器更新行的时间。

从这个角度重新评估你的功能,看看它是否符合你所看到的。

另外,您可能会发现RAISE NOTICE对于显示每个功能正在做什么很有用。