
ко?TEXHIK
06.08.2018
11:40:00
благодарю.

Ilia
06.08.2018
11:40:02

Terminator
06.08.2018
11:45:43
Tarik будет жить. Поприветствуем!
@EvgeniyDDS будет жить. Поприветствуем!

Google

Terminator
06.08.2018
11:54:16
@maxdokin будет жить. Поприветствуем!

alex
06.08.2018
12:38:57
посоны. выручайте )
не могу победить haproxy + посгри
не могу настроить проверять хапрокси кто есть мастер
читаю статейку https://stackoverflow.com/questions/41571150/how-can-we-achieve-route-requests-to-postgres-master-using-haproxy/46575170#46575170
но мне непонятно что за юзер
tcp-check send-binary 75736572 # 'user'
и что за бд
tcp-check send-binary 6461746162617365 # 'database'
как их получить


Игорь
06.08.2018
13:28:07
как их получить
Давай я погуглю за тебя
tcp-check send-binary <hexastring>
Specify an hexa digits string to be sent as a binary question during a raw
tcp health check
May be used in sections: defaults | frontend | listen | backend
no | no | yes | yes
<data> : the data to be sent as a question during a generic health check
session. For now, <data> must be a string.
<hexastring> : test the exact string in its hexadecimal form matches in the
response buffer. A health check response will be considered
valid if the response's buffer contains this exact
hexadecimal string.
Purpose is to send binary data to ask on binary protocols.
Examples :
# redis check in binary
option tcp-check
tcp-check send-binary 50494e470d0a # PING\r\n
tcp-check expect binary 2b504F4e47 # +PONG

alex
06.08.2018
13:28:48

Игорь
06.08.2018
13:28:52

alex
06.08.2018
13:29:01
тут все не та просто

Игорь
06.08.2018
13:29:21
спс, не нада.
чё тебе не нада? Чего не просто? Это не отвечает на твой вопрос?

Google

alex
06.08.2018
13:29:25
ибо все настравивю через патрони, то он в данном случае и будет рулить

Игорь
06.08.2018
13:29:54
и зачем тебе протокол PG использовать для чеков?

alex
06.08.2018
13:30:05
https://github.com/zalando/patroni/tree/master/extras
сижу читаю документацию

Gubaydullin
06.08.2018
13:31:15
Добрый день, https://github.com/m-martinez/pg-audit-json
вот в этом триггере записывается table.oid
а row_id не записывается в таблицу логов

Айтуар
06.08.2018
13:31:58

Gubaydullin
06.08.2018
13:32:15
каким образом можно записать id записи изменяемой?
https://github.com/m-martinez/pg-audit-json/blob/master/sql/pg-audit-json--1.0.1.sql
никто не сталкивался с такой проблемой?

Yaroslav
06.08.2018
13:49:21

Gubaydullin
06.08.2018
13:49:39
в json da
а в отдельное поле - нет
row_id

Yaroslav
06.08.2018
13:50:39
row_id
Эээ... а, это, вообще, что? И зачем?

Gubaydullin
06.08.2018
13:50:54
id изменяемой записи
audit_row.row_id = NEW.id;
думаю что-то подобное

Google

Yaroslav
06.08.2018
13:52:43
id изменяемой записи
А почему Вы думаете, что в каждой таблице всегда будет:
. Простой первичный ключ.
. Он всегда будет по полю с названием "id".
. Он всегда будет одного типа данных.
?

Gubaydullin
06.08.2018
13:53:10
такие условия
исходные

Yaroslav
06.08.2018
13:53:44
Т.е. если у Вас в базе всегда так — допишите. Но для "общего" применения — это, эээ... полная чушь. ;)

Dmitry
06.08.2018
13:55:07

Yaroslav
06.08.2018
13:57:03

Dmitry
06.08.2018
14:01:36
Слушаете изменения, кидаете их в кафку, потом из кафки кладете куда хотите
кафка для примера :)

Yaroslav
06.08.2018
14:05:11

Sergey
06.08.2018
14:07:12

Yaroslav
06.08.2018
14:09:42

Gennady
06.08.2018
14:10:44
Аудит на триггерах - нормальная штука, если её не вешать на все без разбору таблицы.
А вот к производительности jsonb пока есть вопросы, в особенности к jsonb_minus

Dmitry
06.08.2018
14:14:30

Yaroslav
06.08.2018
14:17:58

Dmitry
06.08.2018
14:18:57

Yaroslav
06.08.2018
14:21:34
поясните, пожалуйста, что вы имеете в виду
Я имею в виду, что когда либо база, либо аудит "упадут", то какие-то транзакции либо часть audit log будут потеряны... и кроме "радости" падения того или другого, перед Вами внезапно ещё встанет вопрос их синхронизации.

Dmitry
06.08.2018
14:26:03

Gubaydullin
06.08.2018
14:31:52
audit_row.row_id = NEW.id;
а как сделать аналог:
audit_row.row_id = isset(NEW.id) ? NEW.id : NULL;

Google

Gubaydullin
06.08.2018
14:32:31
не подскажите?
если существует колонка id тогда записать ее значение, иначе записать NULL

Yaroslav
06.08.2018
14:34:00

Gubaydullin
06.08.2018
14:34:26
audit_row.row_id = isset(NEW.id) ? NEW.id : NULL

Admin
ERROR: S client not available

Gubaydullin
06.08.2018
14:34:42
а вот это каким образом можно написать?

Dmitry
06.08.2018
14:34:55
Я имею в виду, что когда либо база, либо аудит "упадут", то какие-то транзакции либо часть audit log будут потеряны... и кроме "радости" падения того или другого, перед Вами внезапно ещё встанет вопрос их синхронизации.
вот, даже в официальной документации написано, что
Slots persist independently of the connection using them and are crash-safe.
Так что, ничего не потеряется. Разве что, может задублироваться:
The current position of each slot is persisted only at checkpoint, so in the case of a crash the slot may return to an earlier LSN, which will then cause recent changes to be resent when the server restarts. Logical decoding clients are responsible for avoiding ill effects from handling the same message more than once.
Но с дублями проще разбираться

Yaroslav
06.08.2018
14:37:13

Gubaydullin
06.08.2018
14:41:41
эта идея мне не нравится
проще сделать isset


Yaroslav
06.08.2018
14:44:26
вот, даже в официальной документации написано, что
Slots persist independently of the connection using them and are crash-safe.
Так что, ничего не потеряется. Разве что, может задублироваться:
The current position of each slot is persisted only at checkpoint, so in the case of a crash the slot may return to an earlier LSN, which will then cause recent changes to be resent when the server restarts. Logical decoding clients are responsible for avoiding ill effects from handling the same message more than once.
Но с дублями проще разбираться
> Так что, ничего не потеряется.
Магия? ;) Понимаете, это же распределённая система, только маленькая.
Т.е. вариант 1:
. Падает standby (то место, куда пишется аудит). Внезапно выясняется, что его backup-ов или нет, или они "старше", чем "вычищенные" с master записи. Упс.
. Падает master, и да, у Вас появляются дубли. На которые кто-то может и "наткнуться" до их вычищения, и начать задавать всякие неприятные вопросы (кстати, их-то и вычистить не тривиально).
Т.е. взамен надёжной системы, ACID в которой гарантирует PostgreSQL, Вы получили distributed database, ACID в которой Вы будете делать своими руками, если что.
Теперь посчитайте сравнительную стоимость решений. ;)


Dmitry
06.08.2018
14:45:45
Ну если аудит требует стронг консистенси, то да, триггерами в той же транзакции писать.
```
Падает standby (то место, куда пишется аудит). Внезапно выясняется, что его backup-ов или нет, или они "старше", чем "вычищенные" с master записи. Упс.
```
- это уже вопрос организации. Так и мастер можно пролюбить

Yaroslav
06.08.2018
14:45:55

Ash
06.08.2018
14:47:31
Есть вопрос: почему PostgreSQL сервис под Windows может выдавать ошибку 1063 и не запускаться. Логи смотрел, права у учётки на каталог есть.

Dmitry
06.08.2018
14:49:22

Yaroslav
06.08.2018
14:49:34

Dmitry
06.08.2018
14:51:12

Yaroslav
06.08.2018
14:53:20
в подавляющем большинстве случаев будет достаточно аудита с эвенчуал консистенси
Попробуте провернуть такую штуку в подпадающих под SOX (и т.п. радость) базах данных в странах, которые на него "молятся", и Вам быстро объяснят, что это Вам достаточно работать в этой организации. :(
(Да, несколько эмоционально, но меня этот security theater как-то уже подбешивает каждый раз, когда сталкиваюсь. Тем не менее, от этого он никуда не исчезает.)

Google

Dmitry
06.08.2018
14:57:35

Yaroslav
06.08.2018
14:59:15


Ash
06.08.2018
14:59:56
А можете тест ошибки полностью показать? И ещё, у какой именно учётки?
Имя службы : PostgreSQL.PTMS
Отображаемое имя : PostgreSQL.PTMS - PostgreSQL Server 9.6
Исполняемый файл : "F:\Program Files\Positive Technologies\Common\PostgreSQL\bin\pg_ctl.exe" runservice -N "PostgreSQL.PTMS" -D "F:\Program Files\Positive Technologies\Common\PostgreSQL\data" -w
Состояние : Остановлена
Тип запуска : Авто
Взаимодействие с рабочим столом : Нет
Собственный процесс : Да
Вход в систему : NT AUTHORITY\NetworkService
2018-08-06 21:58:12 +07 FATAL: the database system is starting up
2018-08-06 21:58:13 +07 FATAL: the database system is starting up
2018-08-06 21:56:52 +07 LOG: database system was shut down in recovery at 2018-08-06 21:44:53 +07
2018-08-06 21:56:52 +07 LOG: database system was not properly shut down; automatic recovery in progress
2018-08-06 21:56:52 +07 FATAL: the database system is starting up
2018-08-06 21:56:52 +07 FATAL: the database system is starting up
2018-08-06 21:56:52 +07 FATAL: the database system is starting up
2018-08-06 21:56:52 +07 FATAL: the database system is starting up
2018-08-06 21:56:52 +07 FATAL: the database system is starting up
2018-08-06 21:56:53 +07 FATAL: the database system is starting up
2018-08-06 21:56:54 +07 FATAL: the database system is starting up
2018-08-06 21:56:55 +07 LOG: redo starts at 2/29EB118
И не запускается. В postgresql.log масса подобных сообщений


Darafei
06.08.2018
15:02:34
ну так recovery

Yaroslav
06.08.2018
15:02:49


Ash
06.08.2018
15:04:39
А чем это кончается для данного запуска?
2018-08-06 21:58:03 +07 FATAL: the database system is starting up
2018-08-06 21:58:03 +07 FATAL: the database system is starting up
2018-08-06 21:58:10 +07 FATAL: the database system is starting up
2018-08-06 21:58:10 +07 FATAL: the database system is starting up
2018-08-06 21:58:11 +07 FATAL: the database system is starting up
2018-08-06 21:58:12 +07 FATAL: the database system is starting up
2018-08-06 21:58:13 +07 FATAL: the database system is starting up

Yaroslav
06.08.2018
15:06:33