172 похожих чатов

Есть какие-нибудь прмиры посмотреть?

14 ответов

11 просмотров

Есть вот такое (но это попытка реализации существенной части SYSTEM VERSIONING из ISO SQL, так что может быть чересчур сложно): https://github.com/xocolatl/periods Но несложно написать самостоятельно, взяв за основу хоть вот это: https://www.postgresql.org/docs/current/plpgsql-trigger.html#PLPGSQL-TRIGGER-AUDIT-EXAMPLE

Артур- Автор вопроса
Yaroslav Schekin
Есть вот такое (но это попытка реализации существе...

спасибо, сделал вот такой костыль https://codeshare.io/LwWrmK насколько это юзабельно? (работает ровно так, как мне нужно) Вставка будет через insert on conflict

Артур
спасибо, сделал вот такой костыль https://codeshar...

На таблицах без первичного ключа -- всё будет не очень юзабельно.

Артур
спасибо, сделал вот такой костыль https://codeshar...

Ну, и напомню рекомендацыю делать varchar без размера, а если нужно ограничивать размер -- то делать это через CHECK.

Артур
спасибо, сделал вот такой костыль https://codeshar...

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, к примеру)?

Артур- Автор вопроса
Yaroslav Schekin
1. А где ключи таблиц? 2. valid_from timestamp → v...

структура таблицы будет такой: 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 );

Артур
спасибо, сделал вот такой костыль https://codeshar...

У UPDATE не записывается OLD, вообще нет DELETE.

Артур- Автор вопроса

что ты имеешь под OLD? предыдущую запись до апйдета? так она уже есть в таблице как ранее заинсерченная или измененная через апйдет

Артур
что ты имеешь под OLD? предыдущую запись до апйдет...

Ты дажэ id не записываешь, там что угодно могло удалиться. Ну и да, если это именно аудит -- то, возможно, имеет смысл как раз положыть на 1НФ и писать лог в чём-то в стиле json. То есть pkey оставить цэликом, возможно, а остальных -- поэкономить, записывая только изменившэеся.

Ilya Anfimov
Ты дажэ id не записываешь, там что угодно могло уд...

Поэкономить, замечу, не только и не столько место на диске под эту табличку -- сколько средства анализа. Список обновлённых полей куда интереснее, чем полная копия новой записи.

Артур- Автор вопроса
Ilya Anfimov
Поэкономить, замечу, не только и не столько место ...

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

Артур
слабо представляю каким образом можно выцепить спи...

Кстати, можно второй раз за день посоветовать почитать исходники и триггеры slony! Цэль там другая, а метод -- примерно тот жэ.

Артур
слабо представляю каким образом можно выцепить спи...

Если нужен только аудит — может быть, в самом деле, хватит и этого подхода https://t.me/pgsql/327541 ? По крайней мере, для этой задачи у него есть преимущества — можно хоть весь аудит (для всех таблиц) вести в одной таблице (и одной триггерной функцией), и изменения схем таблиц на него не влияют, в отличие от. Насчёт примеров — тут что-то было: https://github.com/davidfetter/changelog_trigger https://github.com/2ndQuadrant/audit-trigger

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта