更新和插入时使用 PostgreSQL 触发器排序

Ordering with PostgreSQL trigger when updating and inserting

我希望根据变量对行进行排序。我正在拉扯我的头发试图将我的头缠绕在这种触发器上。我只写过从其他表中获取一些值的触发器。

示例: 我有带列的行可以说:名称和顺序。

CREATE TABLE buildorder (
    name VARCHAR NOT NULL,  
    order_buildorder INT,
);

INSERT INTO buildorder (name, order_buildorder) VALUES ('Gateway', 1);
INSERT INTO buildorder (name, order_buildorder) VALUES ('Pylon', 2);

现在我没有顺序地插入,但是 ON INSERT 触发器应该自动使它成为 3

INSERT INTO buildorder (name) VALUES ('Probe');

但现在我们将第三个构建顺序更新为第一个位置

UPDATE buildorder
SET order_buildorder = 1
WHERE name = 'Probe'

所有其他行现在应该更改以反映此排序更改。我将如何为此编写触发器?

示例结果:

[
{name = "Gateway", order_buildorder = 2},
{name = "Pylon", order_buildorder = 3},
{name = "Probe", order_buildorder = 1},
]

这是个糟糕的主意。

相反,将 order_buildorder 定义为 real 列。

这样一来,您始终可以在两个已存在的行之间插入要排序的新行,而无需更新现有行(只需取要在其间插入的值的算术平均值)。

如果您需要整数订单,请在 select 数据时使用 window 函数即时生成它。