powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логирование данных в PostgreSQL
17 сообщений из 17, страница 1 из 1
Логирование данных в PostgreSQL
    #39341855
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Пишу систему, встал вопрос по логированию данных. Нужно что бы в нужный момент из приложения пользователь мог посмотреть кто изменял те или иные данные в разных таблицах. Например таблица Контрагенты. Кто то поменял телефон, ну или ещё что то.
Вариант есть сделать дублирующую таблицу и одна действующая, а вторая именно лог, где теже поля только поле id уже не уникальный ключ, но так же указывет на запись, но мне кажется слишком громозко и для каждой таблицы надо свой дубликат иметь.
Можно отдельную таблицу, где будут хряниться изменяемые поля.
Есть вариант тоже завести отдельную таблицу, а изменяемые поля будут храниться в виде поля массива.
У кого какая практика и кто какие решения использовал? Посоветуйте пожалуйста
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39341862
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeximusNetПишу систему, встал..."теже поля" - и будешь сравнением всех полей определять, что поменялось? а с чем?
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39341863
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавление, редактирование и удаление записей будет осуществляться только через функции, соответственно функции и будут логировать. Но как это лучше хранить?
Я пока склоняюсь именно к варианту таблицы, у которой будут поля:
1.Дата изменения
2.Кто изменил
3.Массив изменений( список полей, список значений старых, список значений новых)

Но хранить новые или старые данные пока не знаю стоит или нет, но главное суть. И смотреть историю будет как то проще.
Но как в таком случае хранить разные типы данных, например некоторые текстовые поля, а некоторые вообще логические.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39341865
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.LeximusNetПишу систему, встал..."теже поля" - и будешь сравнением всех полей определять, что поменялось? а с чем?

Ну в любом случае что то поменялось, иначе изменения просто не будут производиться. Если пользователь ничего не поменял, то даже при нажатии Сохранить у меня ничего не будет меняться. К тому же главное смотреть вообще что что то поменялось и всё иметь что поменялось.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39341871
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342057
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqLeximusNet,

велосипеды на раззные вкучы тут:
https://yandex.ru/yandsearch?clid=2186618&text=postgresql audit data triggers&lr=213

или тут

https://www.google.ru/search?client=ubuntu&channel=fs&q=postgresql audit data triggers&ie=utf-8&oe=utf-8&gfe_rd=cr&

Гуглить и Яндексить(так можно говорить?) я умею, и транзакции что это такое, да и писать их я тоже умею, вопрос именно не в том как осуществить сбор информации об изменениях, а вопрос именно в том как хранить. Да и способы хранения я знаю несколько, вопрос кто как делает, какие плюсы, удобства и недостатки? Какова практика.

Вопрос именно в том как хранить это логирование.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342088
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeximusNetГуглить и Яндексить(так можно говорить?) я умею
сомневаюсь.
-- для этого надо уметь читать. пока же наблюдаем только обратный навык -- вы сюда явно пописать вышли. (ударение на ваш вкус)

вот тут (это всё по первой сцылке), например:
https://wiki.postgresql.org/wiki/Audit_trigger
описана одна из систем органиизации аудита.

тут (там же)
https://wiki.postgresql.org/wiki/Audit_trigger_91plus
немного другая (с моим любимым hstore)

тут (там же)
https://postgrespro.ru/docs/postgrespro/9.5/plpgsql-trigger
-- ваш частный случай копии таблицы данных с гандикапом

ит.д.

т.ч. вы, барин, "не мешки ворочать" изволите, очевидно


а вообще говоря любая система триггерной репликации -- по совместительству -- система аудита. ( со всей своей избыточностью). поизучайте лондайст, например.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342090
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

PS
хотя вот от такого:
авторTo later cancel the auditing:

DROP TRIGGER audit_trigger_row ON target_table_name;
DROP TRIGGER audit_trigger_stm ON target_table_name;
надо бы заранее отказаться. Ибо под существенной нагрузкой малоосуществимо.

лучше закладывать в текст регулирующие константы, таблицы настроек аудита, или альтерить тело триггерных функций (заранее размножив их копипастой по одной на табличку). (как там с ACID -- боюсь. не очень хорошо , зато без лока самой аудитуемой таблицы) . и т.п.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342109
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeximusNetВариант есть сделать дублирующую таблицу и одна действующая, а вторая именно лог, где теже поля только поле id уже не уникальный ключ, но так же указывет на запись, но мне кажется слишком громозко и для каждой таблицы надо свой дубликат иметь.
Это тебе только кажется. Самый простой и удобный вариант.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342128
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq, спасибо. Так то я эти методы видел, и тригеры понимаю как они работают. Только я не понял как получить имена полей, что бы когда обычный пользователь сможет посмотреть что и когда менялось, смог понять что и кто поменял. А не так что через запятую перечисление значений.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342129
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovLeximusNetВариант есть сделать дублирующую таблицу и одна действующая, а вторая именно лог, где теже поля только поле id уже не уникальный ключ, но так же указывет на запись, но мне кажется слишком громозко и для каждой таблицы надо свой дубликат иметь.
Это тебе только кажется. Самый простой и удобный вариант.

Да, он самый простой от части. Но получается надо вести отдельно учёт каждой таблицы, для каждой таблицы писать механизмы выгрузки, при добавлении полей таблицы добавлять поля в логирующую таблицу. А чистить лог... а точнее даже переносить в архив, на другие носители помоему вообще ужас.... хотя конечно можно и автоматизировать!
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342151
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо!

Я пока склоняюсь к двум вариантам. Оба варианта предполагают хранение изменённых записей именно одной таблице.
Вот только хранить лучше в массиве, например массив полей, массив значений, массив изменений ну или в текстовом виде, в строке?
Подскажите пожалуйста. Кто какие методы использует и какие минусы?
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342344
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользуемся вот этой:

qwwq
https://wiki.postgresql.org/wiki/Audit_trigger_91plus
немного другая (с моим любимым hstore)



Плюсы

- легко и просто устанавливать, удалять аудит на любу таблицу.
- единообразное хранение данных
- можно искать по любому полю, и при необходимости можно сделать индексы по hstore
- hstore легко преобразуется в record
- кстати bytea тоже логируется

Код: plsql
1.
2.
3.
4.
5.
SELECT (populate_record(NULL::mm.mytable, a.row_data)).*
FROM audit.logged_actions a
WHERE a.TABLE_NAME = 'mytable'
      AND schema_name = 'mm'
      AND a.row_data -> 'id' = '9992



соответственно, очень просто восстанавливать данные.

Минусы:

- таблица аудита быстро пухнет, поиск по аудиту будет ресурсоемким. Поэтому мы сделали несколько таблиц (и соответствующих процедур по установке-удалению) audit.logged_actions. Отдельно для справочников, и отдельно для нескольких других сущностей.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342351
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeximusNetВот только хранить лучше в массиве, например массив полей, массив значений, массив изменений ну или в текстовом виде, в строке?


Не думаю что здесь есть смысл придумывать свой велосипед. hstore отлично себя зарекомендовал. Как я уже писал выше есть процедуры преобразования в в reсord и обратно. Как альтернативу можешь рассмотреть json, - можно немного модифицировать процедуры audit_table и будет все храниться в json. Смотри row_to_json, json_populate_recordset. По моим оценкам, хранение в json (jsona) занимает меньше места от 5% до 10% (Это если считать length( row_to_json(a.*)::text))
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39342665
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо большое, так и поступлю.
Особенно большое qwwq.

Я думаю я не буду все поля логировать, не вижу смысла логировать запросы в моей ситуации и ещё некоторые поля. Добавлю отдельное поле ID и буду индексировать по имени (или указанию таблицы) и полю ID, так я быстро буду находить тех кто изменил именно указанную запись.
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39346139
batman666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeximusNetДа, он самый простой от части. Но получается надо вести отдельно учёт каждой таблицы, для каждой таблицы писать механизмы выгрузки, при добавлении полей таблицы добавлять поля в логирующую таблицу. А чистить лог... а точнее даже переносить в архив, на другие носители помоему вообще ужас.... хотя конечно можно и автоматизировать!
Все уже автоматизировано до нас.

http://clarkdave.net/2015/02/historical-records-with-postgresql-and-temporal-tables-and-sql-2011/
...
Рейтинг: 0 / 0
Логирование данных в PostgreSQL
    #39367156
Rutra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также можете посмотреть в сторону модуля pgaudit.
https://github.com/pgaudit/pgaudit
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логирование данных в PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]