
Alexey
16.07.2018
13:36:20
Я в жизни максимум repeatable read использовал.
Так, а сериалайзабл заканчиывется с ошибкой в случае, если разный порядок одноврменно выполняемых транзакции даёт разный результат?
Или постгрес добивается просто любого порядка транзакции?

Sergey
16.07.2018
13:39:13

Google

Yaroslav
16.07.2018
13:39:14

Alexey
16.07.2018
13:41:00
Ага, тогда в случае с мастер-слейв и сериалазбл придумается простой пример, когда не понятно, что делать, ведь на каком-то из slave-ов может запрос привести к ошибке.

Yaroslav
16.07.2018
13:42:53

Alexey
16.07.2018
13:43:36

Yaroslav
16.07.2018
13:43:40

Alexey
16.07.2018
13:43:47

Yaroslav
16.07.2018
13:48:17

Alexey
16.07.2018
13:48:22
Наверно ошибка в том месте, где я реплкацию поместил в тразакцию. Наверняка там как-то по-другому какой-нибудь wal-log просто применяется

Google

Alexey
16.07.2018
13:48:57

Yaroslav
16.07.2018
13:49:43

Alexey
16.07.2018
13:50:15
Давайте тогда для простоты уберём репликацию

Yaroslav
16.07.2018
13:50:54

Alexey
16.07.2018
13:50:55
Рассмотрим insert to table и select sum() from table.

Yaroslav
16.07.2018
13:51:04

Alexey
16.07.2018
13:52:05
Я так понимаю, что разный порядок таких тразакции в serializable имеет разный результат и какая-то из них вернёт ошибку, так?

Yaroslav
16.07.2018
13:52:49

Alexey
16.07.2018
13:55:53
Чёрт, всё наоборот. Я 10 раз спросил и всё равно не так понял про порядок.
Окей, значит постгрес выберет какой-то порядок, к примеру, вначале select, а потом insert и всё будет хорошо...

Yaroslav
16.07.2018
13:57:44
Чёрт, всё наоборот. Я 10 раз спросил и всё равно не так понял про порядок.
Вот полное определение из стандарта SQL:
—
The execution of concurrent SQL-transactions at isolation level SERIALIZABLE is guaranteed to be serializable.
A serializable execution is defined to be an execution of the operations of concurrently executing SQL-transactions that produces the same effect as some serial execution of those same SQL-transactions.
A serial execution is one in which each SQL-transaction executes to completion before the next SQL-transaction begins.
—
Вот и всё.

Alexey
16.07.2018
14:05:04
Понял
https://www.postgresql.org/docs/10/static/transaction-iso.html
Вот тут есть пример


Yaroslav
16.07.2018
14:08:09
> Я понял, что я не могу придумать пример, когда serializable может вернуть ошибку. Т.е. поидее всегда можно набор транзакции в каком-то порядке выполнить.
Так дело-то в том, что клиенты выполняют их параллельно.
Так-то конечно можно — блокируй всю базу (хотя бы, для записи), как только приходит первая пишущая транзакция, до её завершения, и дело с концом. (sqlite так и поступает, например.)

Alexey
16.07.2018
14:08:49
Да, я понял,
Yaroslav, спасибо
Пример плохой для мастер-слейв и сериалайзабл не удалось придумать.

Yaroslav
16.07.2018
14:18:11

Google

Fike
16.07.2018
15:01:26

alex
17.07.2018
07:04:01
всем времени
пару вопросов нубскх есть ))
ставлю посгри, и везде пишут что надо задавать пас для "postgres"
или можно не задавать ?

Yaroslav
17.07.2018
07:07:43
или можно не задавать ?
Лучше задавать, наверное... Иначе как вы думаете дистанционно подключаться этим пользователем?

alex
17.07.2018
07:09:16
ок.
теперь про схему. можно в двух словах.

Yaroslav
17.07.2018
07:19:53

Mike Chuguniy
17.07.2018
07:31:52
или можно не задавать ?
Когда доступ этим пользователем разрешён только локально и в пг_хбяа.конф либо траст, либо пир.

Yaroslav
17.07.2018
07:34:55

alex
17.07.2018
07:39:17

Vasiliy
17.07.2018
07:44:31
Господа, а есть у кого repmgr + postgresql 10 ?
При клонировании слейва получаю ошибку /usr/lib/postgresql/10/bin/pg_basebackup: unrecognized option '--xlog-method=s'
Судя по исходникам repmgr - в базе должны быть вот такие таблички, но у меня их нет.
Что может быть не так ?
https://github.com/2ndQuadrant/repmgr/blob/master/repmgr--4.1.sql

Yaroslav
17.07.2018
07:48:05

Vasiliy
17.07.2018
07:50:07

Yaroslav
17.07.2018
07:56:30

Sergey
17.07.2018
07:57:59
Это штатное переименование xlog => wal в 10ке
Для pg_basebackup от Postgresql 10 нужная опция теперь называется --wal-method или кратко так же как в старом pg_basebackup -X

Vasiliy
17.07.2018
08:02:36
Да, переименование штатное.
По sql по ссылке я вижу, что должны быть таблички repmgr.nodes, итп
Но я их у себя не вижу:
postgres@pgmaster-preprod:~$ psql repmgr
repmgr=# \dt
Did not find any relations.
Суть в том, что repmgr пытается найти переменную server_version_num

Google

Sergey
17.07.2018
08:06:16
А create extension repmgr; нормально отрабатывает?

Vasiliy
17.07.2018
08:09:59

Sergey
17.07.2018
08:11:38
А если сказать \dt repmgr.*
?

Andre
17.07.2018
08:11:54
Привет! Есть следующая ситуация: внутри транзакции создаю пару временных таблиц, а потом выполняю селект с использованием этих временных таблиц. Хочу завершить транзакцию (чтобы удалились временные таблицы) и тут же получить результат селекта из транзакции. Это вообще возможно?
не хотелось бы разрывать транзакцию на отдельные запросы из приложения — а вдруг всё к чертям упадёт как раз после селекта и до коммита?
BEGIN;
CREATE TEMP TABLE table_1 ON COMMIT DROP ...
CREATE TEMP TABLE table_2 ON COMMIT DROP ...
SELECT ...
COMMIT;
На выходе получаю просто сообщение COMMIT без данных

Yaroslav
17.07.2018
08:14:42

Admin
ERROR: S client not available

Sergey
17.07.2018
08:15:18

Anton [Mgn, az09@osm]
17.07.2018
08:15:32

Yaroslav
17.07.2018
08:15:36

Andre
17.07.2018
08:16:38

Sergey
17.07.2018
08:16:59

Yaroslav
17.07.2018
08:17:35

Vasiliy
17.07.2018
08:25:42
А если сказать \dt repmgr.*
Так таблички находит.
Но всё равно даёт ошибку, как будто не получает корректную версию postgres:
https://github.com/2ndQuadrant/repmgr/blob/cb46fb6410d9724f2dfaa870de7e117e6d6f8910/configfile.c#L1838

alex
17.07.2018
08:30:09
итак вернмся к схемам.
как я понял, схемы , это типа группировки бд.
может ли одна бд быть сразу в двух схемах ?

Google

alex
17.07.2018
08:31:29
получается что я сперва должен сделать бд а потом ее прикрутить к определенной схеме

Sergey
17.07.2018
08:31:38

alex
17.07.2018
08:33:18
тогда я несовсем понимаю, для чего нужны схемы. пусть одна "public"

Yaroslav
17.07.2018
08:33:29

Roman
17.07.2018
08:33:55

Vladimir
17.07.2018
08:34:42
похожу он просто троилт )

alex
17.07.2018
08:35:00

Yaroslav
17.07.2018
08:36:18

Roman
17.07.2018
08:38:29

Vasiliy
17.07.2018
08:41:35

Yaroslav
17.07.2018
08:45:06

Vasiliy
17.07.2018
08:47:53

Yaroslav
17.07.2018
08:48:22

X
17.07.2018
09:11:10
привет. есть вопрос. читаю слайды обучающие по постгресу, про транзакции инаписано:Если прерванная транзакция успела создать новые версии строк, эти
версии не уничтожаются (не происходит «физического» отката данных).
Благодаря информации о статусах другие транзакции увидят, что
транзакция, создавшая или удалившая версии строк, на самом деле
прервана, и не станут принимать ее изменения во внимание.
не происходит «физического» отката данных - хорошо, не происходит, моя строка изменилась одна, а вторая нет, как он вернет данные в первоначальный вид?
у первой строки
тут он пишет никак
они не записываются в базу ведь так?, только если транзакция успещна, строки записываются в базу?