Я пытаюсь удалить строки в определенном порядке. Я пробовал предложения в сообщении How do I delete a fixed number of rows with sorting in PostgreSQL?, но ничего не получилось. Я знаю, что они не работали, потому что у меня был триггер при удалении и видя, какой из них удален, и он никогда не делает этого в том порядке, в котором я его хочу.Удалить с сортировкой в PostgresSQL
Тесты, которые я написал, как это:
create table test1 (
th text,
co text,
ty text);
CREATE OR REPLACE FUNCTION testfunc() RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
DECLARE modified_row test1%ROWTYPE;
BEGIN
IF TG_OP = 'DELETE' THEN
modified_row := OLD;
ELSE
modified_row := NEW;
END IF;
raise notice 'opearation: %, co: %', TG_OP, modified_row.co;
RETURN modified_row;
END;
$$;
CREATE TRIGGER trigger_test1
BEFORE DELETE OR INSERT on test1
FOR EACH ROW
EXECUTE PROCEDURE testfunc();
insert into test1 (th, co, ty) values ('t1', 'c1', 'p'), ('t2', 'c2','p'), ('t2', 'c3','p'), ('t2', 'c4','p');
delete from test1 where ctid in (select ctid from test1 order by co desc);
Функция удаления выше утверждение является набравших наибольшее количество голосов и принял ответ в посте выше. Но для меня, выход всегда был:
ВНИМАНИЕ: opearation: DELETE, совместно: c1
ВНИМАНИЕ: opearation: DELETE, совместно: c2
ВНИМАНИЕ: opearation: DELETE, совместно: c3
ВНИМАНИЕ: opearation: DELETE, совместно: c4
, который указывает на то, что удалений не выполняются в порядке по убыванию «со», что я пытаюсь сделать. Я что-то упустил?
ПРИМЕЧАНИЕ: забудьте о порядке вставки, меня беспокоит только порядок удаления. И я не мог задать этот вопрос в вышеупомянутом сообщении, потому что у меня нет достаточной репутации, чтобы оставить комментарий.
Вы можете создать 'CURSOR' и удалить один за другим? –
Если вы используете LIMIT 1 в своем подселекте delete, вы сначала удалите последний. Если вы сделаете это в цикле, вы получите заказ, который вы пожелаете. – hruske
хорошо, я попробую те. Но нет способа сортировать удаления? – ski