Есть вот такое (но это попытка реализации существенной части SYSTEM VERSIONING из ISO SQL, так что может быть чересчур сложно): https://github.com/xocolatl/periods Но несложно написать самостоятельно, взяв за основу хоть вот это: https://www.postgresql.org/docs/current/plpgsql-trigger.html#PLPGSQL-TRIGGER-AUDIT-EXAMPLE
спасибо, сделал вот такой костыль https://codeshare.io/LwWrmK насколько это юзабельно? (работает ровно так, как мне нужно) Вставка будет через insert on conflict
На таблицах без первичного ключа -- всё будет не очень юзабельно.
Ну, и напомню рекомендацыю делать varchar без размера, а если нужно ограничивать размер -- то делать это через CHECK.
1. А где ключи таблиц? 2. valid_from timestamp → valid_from timestamptz, см. https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_timestamp_.28without_time_zone.29 и varchar(N) → text+CHECK (по той же ссылке). 3. У Вас получилась скорее таблица аудита, чем temporal, нет (зачем там action, к примеру)?
структура таблицы будет такой: create table if not exists home.dt_banki_responses ( id int primary key, link varchar(255) not null, title varchar(255) not null, city varchar(255) not null, bank_name varchar(255) not null, score integer null, status varchar(100) null, username varchar(100) null, create_dt timestamp not null, comments integer null, content text not null, bank_answer text null, bank_answer_date timestamp null, admin_answer text null, admin_answer_date timestamp null, parse_dt date not null );
У UPDATE не записывается OLD, вообще нет DELETE.
что ты имеешь под OLD? предыдущую запись до апйдета? так она уже есть в таблице как ранее заинсерченная или измененная через апйдет
Ты дажэ id не записываешь, там что угодно могло удалиться. Ну и да, если это именно аудит -- то, возможно, имеет смысл как раз положыть на 1НФ и писать лог в чём-то в стиле json. То есть pkey оставить цэликом, возможно, а остальных -- поэкономить, записывая только изменившэеся.
Поэкономить, замечу, не только и не столько место на диске под эту табличку -- сколько средства анализа. Список обновлённых полей куда интереснее, чем полная копия новой записи.
слабо представляю каким образом можно выцепить список обновленных полей в отдельный столбец
Сравнивая по одному, например.
Кстати, можно второй раз за день посоветовать почитать исходники и триггеры slony! Цэль там другая, а метод -- примерно тот жэ.
Если нужен только аудит — может быть, в самом деле, хватит и этого подхода https://t.me/pgsql/327541 ? По крайней мере, для этой задачи у него есть преимущества — можно хоть весь аудит (для всех таблиц) вести в одной таблице (и одной триггерной функцией), и изменения схем таблиц на него не влияют, в отличие от. Насчёт примеров — тут что-то было: https://github.com/davidfetter/changelog_trigger https://github.com/2ndQuadrant/audit-trigger
Обсуждают сегодня