
Dmitry
20.09.2018
14:59:08
Вот Линус Торвальдс - это основной разработчик Линукса. Он его основал.

Yaroslav
20.09.2018
15:00:17
Основной был Стоунбрейкер.
Не был. В проекте PostgreSQL он никогда не участвовал, как мне помнится.
Более того, именно его идеи, похоже, сейчас доставляют наибольшую боль проекту.

Dmitry
20.09.2018
15:00:35
А Постгрес основал Стоунбрейкер, а не Том Лэйн.

Google

Dmitry
20.09.2018
15:00:42
Учите историю.

Yaroslav
20.09.2018
15:00:49

Dmitry
20.09.2018
15:01:07
Имеет. Основной от слова "основа".
Сюрприз?
Сколько потуг на ровном месте ))

Yaroslav
20.09.2018
15:03:30
Учите историю.
Зачем? Вы сами-то пробовали этот ужас читать?
Хорошо, что хоть кое-что, "основанное" Стоунбрейкером, из проекта выкинули. :)
> Имеет. Основной от слова "основа".
Мне за словарём сходить? Или мы тут демагогией будем заниматься?

Vladimir
20.09.2018
15:03:58

Dmitry
20.09.2018
15:04:25

Yaroslav
20.09.2018
15:05:58

Dmitry
20.09.2018
15:07:49
Когда дискуссия сказывается к взыванию к авторитетам, а не к реальным аргументам, то дальше смысла обсуждать что-либо нет. Ну вот Линусу Торвальдсу не нравится C++. Это значит, что на нём не надо писать программы? Для кого-то - да. Этот кто-то во всех разговорах будет ссылаться на высказывания своего кумира. Остальных это не волнует. C++ - прекрасный язык.

Yaroslav
20.09.2018
15:11:29

Dmitry
20.09.2018
15:12:44

Google

elfiki
20.09.2018
15:13:28
да с ним бесполезно спорить, он вон на запрос к конкретному набору данных, который гарантированно вернет только 1 запись из-за группировки и лимита поставит сортировку, чтобы не было непредсказуемого результата, а результат без сортировки будет считать неопределенным

Yaroslav
20.09.2018
15:14:20

Dmitry
20.09.2018
15:15:42
Ну раз фича до сих пор в Постгресе, значит её можно использовать. Пользуйтесь на здоровье.

Александр
20.09.2018
15:18:25
Вы пол дня потратили на фигню

Dmitry
20.09.2018
15:19:34

elfiki
20.09.2018
15:19:42
Да. Ну и что?
попробуйте думать немного своей головой, а не только мануалы зубрить. вот что

Yaroslav
20.09.2018
15:20:13

Dmitry
20.09.2018
15:20:21

Vladimir
20.09.2018
15:21:02

Александр
20.09.2018
15:21:40
Чат засоряете только. А когда предложили конкретный пример написать - просто проигнорировали. Вы уже просто из принципа пытаетесь доказать свою правоту, хотя поняли, что оппонент тоже прав)

Dmitry
20.09.2018
15:22:13
Никакого принципа тут нет.

Александр
20.09.2018
15:23:04
И снова вы обратили внимание только на спор

Yaroslav
20.09.2018
15:23:36
А, продолжение хабра. Так можно же попробовать. ;)

Dmitry
20.09.2018
15:24:36

Александр
20.09.2018
15:25:21

Terminator
20.09.2018
15:26:04
@Igorgoldshteyn будет жить. Поприветствуем!

Google

Dmitry
20.09.2018
15:26:18

Yaroslav
20.09.2018
15:26:38
В документации.
Кстати да, можно будет его спросить. А то примеров в статье как-то... нет. ;)

Dmitry
20.09.2018
15:41:35
А?

Yaroslav
20.09.2018
15:44:10
Где это?
https://www.postgresql.org/docs/current/static/rules-update.html
In many cases, tasks that could be performed by rules on INSERT/UPDATE/DELETE are better done with triggers. Triggers are notationally a bit more complicated, but their semantics are much simpler to understand. Rules tend to have surprising results when the original query contains volatile functions: volatile functions may get executed more times than expected in the process of carrying out the rules.
Also, there are some cases that are not supported by these types of rules at all, notably including WITH clauses in the original query and multiple-assignment sub-SELECTs in the SET list of UPDATE queries. This is because copying these constructs into a rule query would result in multiple evaluations of the sub-query, contrary to the express intent of the query's author.

Dmitry
20.09.2018
15:45:33
Но это совсем не значит, что от правил надо шарахаться.


Denys
20.09.2018
20:09:09
misteri di cdcqq: come faccio ad avere più di 17 views per entry

Antony
20.09.2018
20:12:54
Привет всем кто не спит) Начал экспоненциально расти pg_xlog, за час скушал 70ГБ (всё место)
может кто натолкнуть на мысль, чем это могло быть вызвано?

Yaroslav
20.09.2018
20:15:15
Или просто идёт огромная транзакция, да и всё...

Antony
20.09.2018
20:16:06
?


Yaroslav
20.09.2018
20:44:13
А?
Про пример "весёлого" поведения с тем, что есть в документации (мне подсказали):
shoelace_data:
sl_name | sl_avail |
---------+----------+----------+
a_name | 6 |
-- В сессии номер 1:
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
UPDATE shoelace_data SET sl_avail = 8 WHERE sl_name = 'a_name';
-- В сессии номер 2:
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
UPDATE shoelace_data SET sl_avail = 6 WHERE sl_name = 'a_name'; -- блокируется
-- В сессии номер 1:
COMMIT;
-- В сессии номер 2:
COMMIT;
И в результате, в shoelace_data:
sl_name | sl_avail |
---------+----------+
a_name | 6 |
А вот в логе:
sl_name | sl_avail | log_who | log_when
---------+----------+----------+--------------------
a_name | 8 | postgres | 2018-09-20 23:41:46
Мне одному кажется, что здесь чего-то не хватает? ;)

Dmitry
20.09.2018
21:32:10
Используйте AFTER-триггеры для протоколирования, что тут сказать ещё?


Yaroslav
20.09.2018
21:37:51
Ну и что это доказывает? Это доказывает лишь неприемлемость данного решения в конкурентной среде.
Это доказывает, что даже в примерах из документации есть то, о чём она же и предупреждает (неожиданные неприятные "сюрпризы").
А с триггером (которые там и советуют) сработало бы, да...
Т.е. это RULE — неправильное. Так как это вроде бы единственное DO ALSO RULE, которое есть в документации...
Может быть, есть другие примеры? Или всё же, как утверждают все, кого я цитировал, с RULE "каши не сваришь"?
Причём такие примеры, кстати, чтобы использование RULE было оправдано, т.е. оно было явно лучше триггеров (которые являются куда более прозрачным механизмом и т.п.).

Google

Dmitry
20.09.2018
21:45:14
Посмотрю потом в прошлых разработках есть ли что-нибудь в качестве примера.
Но я повторюсь, что активно ими пользовался, когда не было триггеров на виды.

Let Eat
21.09.2018
05:43:30
Так как немного читал про локи недавно, рискну предположить что 15 и 120? Рассуждаю так: первая лочит все строки, вторая находит строку где была 15 и ждёт лок на нее, первая комиттит строки 15 и 20 и освобождает лок, вторая получив Лок на ту строку где была 15, а сейчас 20 вычисляет значение для записи используя новое значение в строки (ибо read committed) -120

Vladimir
21.09.2018
05:45:47

Let Eat
21.09.2018
05:48:19
А какой результат (без объяснения)? На телефоне, проверить не могу :)

Nikita
21.09.2018
05:56:30
15 115?

Vladimir
21.09.2018
05:57:02

Let Eat
21.09.2018
06:12:16
Хммм если лок только на запись, а вычисление значения идёт вовремя чтения (что наверное логично), то должно быть 15 и 115 :)

Mikhail
21.09.2018
06:12:59
Рул дипрейкатит тем неменее. Его можно использовать как хак на свой страх и риск. Как временное решение чтобы что-то куда то перенаправить. Пример с хабра это пример из документации — читайте блин документацию люди
https://www.postgresql.org/docs/10/static/transaction-iso.html#XACT-READ-COMMITTED
Пример про website

Let Eat
21.09.2018
06:40:38
Ключ: The search condition of the command (the WHERE clause) is re-evaluated to see if the updated version of the row still matches. Вторая транзакция просто не обновит ничего, т.к. пропустит первую строку потому что where не сработает вовремя чтения (там 10) и пропустит вторую строку, т.к. после взятия лока перепроверит where и оно снова не сработает (там уже 20). Итого в таблице останется 15 и 20

Vladimir
21.09.2018
06:42:22

Ilia
21.09.2018
06:45:21
Это не read committed, йо!
А будет 20 и 115

Let Eat
21.09.2018
06:52:30

Dmitry
21.09.2018
06:53:15
Всем добра! Подскажите, можно ли как нибудь на уровне сессии понизить привилегии до read-only?

Ilia
21.09.2018
06:54:01
Почему?
По логике работы тех транзакций

Terminator
21.09.2018
06:56:02
@vinsler будет жить. Поприветствуем!
@TRIX1S будет жить. Поприветствуем!

Google

Terminator
21.09.2018
07:08:49
@Sardorious будет жить. Поприветствуем!

Sardor
21.09.2018
07:09:04
Здравствуйте, коллеги. Я специалист по Oracle, в PostgreSQL новенький, возник вопрос при миграции процедуры (функции):
Есть функция с обычними параметрами и out refcursor. Как тут использовать FETCH ALL чтобы возвращал записи?

Dmitry
21.09.2018
07:10:01

Sardor
21.09.2018
07:16:04

Dmitry
21.09.2018
07:19:12
Я вижу у Вас 1 out-параметр, который курсор. Вы ещё хотите, чтобы функция вернула ещё один курсор или набор строк? Не совсем понятно.

Sardor
21.09.2018
07:22:30
Вот посмотрите

Dmitry
21.09.2018
07:23:56

Dmitry
21.09.2018
07:26:51
спасибо, но мне, к сожалению, не подойдет.
Тогда никак. Я выносил на обсуждение этот вопрос как-то (чтобы этой командой можно было пользоваться не только суперпользователями, но простыми ролями с паролем), но поддержки не получил.