更新和插入时使用 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 函数即时生成它。
我希望根据变量对行进行排序。我正在拉扯我的头发试图将我的头缠绕在这种触发器上。我只写过从其他表中获取一些值的触发器。
示例: 我有带列的行可以说:名称和顺序。
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 函数即时生成它。