@pgsql

Страница 919 из 1062
ко?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: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
каким образом можно записать id записи изменяемой?
Ну так, с виду, всё же и так записывается в JSON... разве нет?

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
Т.е. если у Вас в базе всегда так — допишите. Но для "общего" применения — это, эээ... полная чушь. ;)
аудит на триггерах - это уже полная чушь, так что, от id хуже не будет ?

Yaroslav
06.08.2018
13:57:03
аудит на триггерах - это уже полная чушь, так что, от id хуже не будет ?
Ну почему это полная чушь? Многие пользуются, и ничего... Вот наличие в каждой таблице id с тремя условиями, которые я перечислил выше, действительно похоже на полную чушь.

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

кафка для примера :)

Yaroslav
06.08.2018
14:05:11
Производительность сильно просядет. Зачем все это, если есть логическая репликация?
Или не сильно. Или почти никак. Вы же ничего не знаете не про его БД, ни о том, на какие таблицы эти триггеры будут "вешаться". Premature optimization is the root of all evil. -- D.E. Knuth Мне вот любопытно, откуда у всех такая одержимость производительностью? ;)

Yaroslav
06.08.2018
14:09:42
С тех времен когда компьютеры были большими, а производительность маленькой.
Да, наверное... Ну а у новичков откуда эта чушь в головах берётся (многие из них, вроде, "старших" слушать же не очень любят)? ;)

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

Dmitry
06.08.2018
14:14:30
Аудит на триггерах - нормальная штука, если её не вешать на все без разбору таблицы. А вот к производительности jsonb пока есть вопросы, в особенности к jsonb_minus
в случае постгреса нормальная штука была когда-то :) Понятно, что если нет возможности получить изменения никак кроме триггеров, то придется использовать триггеры. Но в данном случае решение жестко заточено под постгрес, так что, универсальность - не аргумент

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

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
если существует колонка id тогда записать ее значение, иначе записать NULL
А Вы её из подготовленного JSON-а "выдерните", например (всё равно он у Вас уже есть).

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
эта идея мне не нравится
Почему? И почему Вы думаете, что isset сделать проще?

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

Dmitry
06.08.2018
14:51:12
Да, это вопрос организации. Только пока Вы это организовываете, время продолжает тикать. И деньги — вместе с ним.
Ну тут очень спорно, что дешевле - аудитить на триггерах, т.е. еще больше нагрузить свою БД или поднять рядом еще одну и лить через logical decoding

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

Ну тут очень спорно, что дешевле - аудитить на триггерах, т.е. еще больше нагрузить свою БД или поднять рядом еще одну и лить через logical decoding
Ещё раз, это яблоки и апельсины — 100% решение легко заменяется... но только 99.9%-ным. Если кого-то устраивает, то почему нет, но, давая такой совет, по-хорошему, предупредить-то надо...

Google
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: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

Ash
06.08.2018
15:04:39
Ну так вроде recovery идёт себе, а клиенты пока идут гулять... т.е. в приведённом куске всё на первый взгляд нормально.
Так вроде бы за целый день можно было и завершить восстановление. Упала база после перезагрузки сервера, и хоть бы хны, никаких поползновений в сторону улучшения.

А чем это кончается для данного запуска?
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
Так вроде бы за целый день можно было и завершить восстановление. Упала база после перезагрузки сервера, и хоть бы хны, никаких поползновений в сторону улучшения.
> Так вроде бы за целый день можно было и завершить восстановление. Давайте подробнее. Вы запустили базу, и ничего больше не делали, так?

Страница 919 из 1062