在PostgreSQL中使用触发器进行排序

在PostgreSQL中使用触发器进行排序,postgresql,Postgresql,我正在开发一个SpringMVC应用程序,其中我正在使用hibernate的PostgreSQL数据库。我意识到Hibernate有它自己的触发器,但是使用它们需要很多开销。因此,我想使用PostgreSQL触发器 看看下面粘贴的数据模型 问题:它应该做什么? 答:数据库更新(CRUD操作)后,会有一个整数列(noteorder),用于定义数据的顺序。我想重置它,并将其开始设置为1,然后递增,直到行结束 还有一个陷阱::-( 当满足某些条件(如sectionid或canvasid)时,是否可以传

我正在开发一个SpringMVC应用程序,其中我正在使用hibernate的PostgreSQL数据库。我意识到Hibernate有它自己的触发器,但是使用它们需要很多开销。因此,我想使用PostgreSQL触发器

看看下面粘贴的数据模型

问题:它应该做什么? 答:数据库更新(CRUD操作)后,会有一个整数列(noteorder),用于定义数据的顺序。我想重置它,并将其开始设置为1,然后递增,直到行结束

还有一个陷阱::-( 当满足某些条件(如sectionid或canvasid)时,是否可以传递do use触发器等参数

这是可能的还是我必须休眠触发器。请让我知道,任何想法,链接将是很好的。如果有任何问题,请留下评论。谢谢

以下是数据模型:

CREATE TABLE note
(
  noteid integer NOT NULL,
  sectionid integer,
  canvasid integer,
  text character varying,
  notecolor character varying,
  noteheadline character varying,
  id integer NOT NULL,
  canvasname character varying,
  noteorder integer,
  CONSTRAINT noteid PRIMARY KEY (noteid),
  CONSTRAINT user_note_fk FOREIGN KEY (id)
      REFERENCES person (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);

您可以使用
行号
窗口功能运行更新查询

UPDATE note set note.noteorder = subquery.rn
FROM  
(
    SELECT id,row_number() over () AS rn
    FROM note
) subquery
WHERE note.id = subquery.id;
您可以使用触发器,但不能传递任何参数。从:

触发器函数必须声明为不接受 参数和返回类型触发器。(触发器函数接收 它的输入通过一个特殊传递的TriggerData结构,而不是 普通函数参数的形式。)


谢谢。我想我不能使用它,因为我需要在任何条件下传递2个参数。谢谢你的回答,我想我会研究hibernate的一些解决方案。你可能需要在
over
子句中使用
order by noteorder
来保留当前的排序顺序。否则这将只是一个“随机”顺序。