Size: a a a

pgsql – PostgreSQL

2020 May 18

YS

Yaroslav Schekin in pgsql – PostgreSQL
Grigory S
Livelock это частный случай starvation. Я имею в виду ситуацию, когда сессии блочат друг друга, постгрес их откатывает, они ретраят, опять блочат друг друга и так бесконечно (легко смоделировать, если ордер разный у сессий).
Ах да, смысл-то в том, что в тех СУБД, которые используют "правильный" deadlock handling, эту ситуацию воспроизвести невозможно. Вот поэтому я пишу, что в deadlock detector PostgreSQL есть дефект.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Victor Yegorov
нет. многолетняя практика показывает, что после определённой точки развития проекта,
удобство разработки (и разработчиков) уходит в самый конец списка приоритетов.
самые проблемные проекты в моей практике были те, где всё решали разработчики — нагрузку они не держали, совсем
> многолетняя практика показывает, что после определённой точки развития проекта, удобство разработки (и разработчиков) уходит в самый конец списка приоритетов.

Значит, проект этот совсем не здоров, с т.з. разработчика.

> самые проблемные проекты в моей практике были те, где всё решали разработчики — нагрузку они не держали, совсем

Когда в сложном / нагруженном проекте всё решают разработчики (а DBA, к примеру, совсем нет) — у них зачастую бывают проблемы похуже, чем недержание нагрузки. ;(
источник

l

lnuynxa in pgsql – PostgreSQL
Yaroslav Schekin
Вообще-то, важно. К примеру, механики (у которых к примеру, нет водительского удостоверения), могут, конечно, советовать гонщикам, как им правильно управлять автомобилем... просто ценность этих советов априори сомнительна. ;)
С DBA и разработчиками БД — примерно та же ситуация.
разработчики лучше дба знают, как быстро ехать на базе?)
источник

DM

Dmitry Marakasov in pgsql – PostgreSQL
Привет. А можно как-то из SELECT .. ON CONFLICT DO UPDATE .. RETURNING получить информацию о том, была запись вставлена или обновлена?
источник
2020 May 19

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Если обновлена, то RETURNING ничего не вернет.
источник

DM

Dmitry Marakasov in pgsql – PostgreSQL
вернёт
источник

DM

Dmitry Marakasov in pgsql – PostgreSQL
ON CONFLICT DO NOTHING не вернёт
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
А, сорян, попутал.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Dmitry Marakasov
Привет. А можно как-то из SELECT .. ON CONFLICT DO UPDATE .. RETURNING получить информацию о том, была запись вставлена или обновлена?
думаю, что только по косвенным признакам.
скажем, если created_at = updated_at, то это был INSERT. или если updated_at IS NULL, тоже скорее всего.
если updated_at > created_at, то был UPDATE
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Еще, наверное, можно взять значение сиквенса автоинкремента до апсёрта и сравнить потом с id вставленного значения.
источник

Ð

Ð in pgsql – PostgreSQL
извращения
источник

Ð

Ð in pgsql – PostgreSQL
update .... ;
if found then
   делай то что надо при апдейте
else
   insert ....;
   делай то что при инсерте
end if;
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Классно, но это же plpgsql, а что делать на клиенте? К тому же здесь уже неатомарно получается.
источник

Ð

Ð in pgsql – PostgreSQL
вызывать функцию
источник

Ð

Ð in pgsql – PostgreSQL
с транзакцией, как обычно
источник

Ð

Ð in pgsql – PostgreSQL
кстати, чсх, у меня однажды plpgsql функции стали работать значительно быстрее чем аналогичные им sql функции с теми же запросами, я так и не разобрался почему так получилось, может кто сталкивался с похожим
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Ð
с транзакцией, как обычно
На каком уровне изоляции? Если не SERIALIZABLE, то такой код будет небезопасен для параллельного исполнения.
источник

Ð

Ð in pgsql – PostgreSQL
на таком какой требуется для задачи
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Ну-ну, удачной отладки тогда.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Ð
извращения
зачем вы советуете метод, в котором есть гонка и возможны ошибки, вместо стандартного встроенного средства?
источник