CREATE TABLE test_table
(
id serial primary key,
prev_id integer null,
next_id integer null
);
INSERT INTO test_table (prev_id, next_id)
VALUES (null, 2),
(1, 3),
(3, null);
-- Начальные данные
-- Создаём новый первый абзац
-- Находим id 1ого абзаца (= 1)
INSERT INTO test_table (prev_id, next_id)
VALUES (null, 1);
-- Добавили 4ый
UPDATE
test_table
SET prev_id = 4
WHERE id = 1;
-- Создаём абзац после 2ого
-- После него идёт 3ий
INSERT INTO test_table (prev_id, next_id)
VALUES (2, 3);
-- Добавили 5ый
UPDATE
test_table
SET next_id = 5
WHERE id = 2;
UPDATE
test_table
SET prev_id = 5
WHERE id = 3;
-- Создаём последний абзац
-- Перед ним окажется 3ий
INSERT INTO test_table (prev_id, next_id)
VALUES (3, null);
-- Добавили 6ой
UPDATE
test_table
SET next_id = 6
WHERE id = 3;
SELECT *
FROM test_table;