Порядок с триггером PostgreSQL при обновлении и вставке - PullRequest
0 голосов
/ 02 октября 2019

Я хочу отсортировать строки на основе переменной. Я дергаю себя за волосы, пытаясь обернуть голову вокруг спускового крючка. Я только когда-либо писал триггеры, которые получают некоторые значения из других таблиц.

Пример: у меня есть строки со столбцами, скажем: имя и порядок.

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');

Но теперь мы обновляем третий сборщик, чтобы он занимал 1-ю позицию

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

Все остальные строки теперь должны измениться, чтобы отразить это изменение в порядке. Как мне написать триггер для этого?

Пример результата:

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

1 Ответ

0 голосов
/ 02 октября 2019

Это ужасная идея.

Вместо этого определите order_buildorder как столбец double precision.

Таким образом, вы всегда можете вставить новую строку, которая будет упорядочена между двумя ужесуществующие строки без обновления существующих строк (просто возьмите среднее арифметическое значений, между которыми вы хотите вставить).

Если вам нужен интегральный порядок, создайте его на лету, используя оконную функцию при выборе данных.

...