Size: a a a

pgsql – PostgreSQL

2021 January 22

AS

Alexey Stavrov in pgsql – PostgreSQL
Yaroslav Schekin
А Вы пробовали просто воспроизвести (кстати, зачем)?
Вообще, в документации пишут следующее:

Trying to update the same row twice in a single statement is not supported. Only one of the modifications takes place, but it is not easy (and sometimes not possible) to reliably predict which one. This also applies to deleting a row that was already updated in the same statement: only the update is performed. Therefore you should generally avoid trying to modify a single row twice in a single statement.
Спасибо.

> кстати, зачем

Увидел такого рода запрос, где случайно в from добавили доп. таблицу очень большого размера.
В итоге на pg9.5 делается seq. scan по этой таблице и запрос работает в 30 000 медленнее.

Стало интересно, как ведёт себя pg в этом случае и что может пойти не так.

Ваш комментарий взят из статьи про CTE. Я бы предположил, что это может относиться только к CTE, когда в разных sub-statement-ах обновляется одна и та же строка.
источник

SV

Sergei Vlasov in pgsql – PostgreSQL
Добрый день, хочется создать такое хранилище

название столбца - кардинальность (тип значения)
(A) ARTICLE - 500000 (uuid)
(R) REGION - 200 (uuid)
(S) SIZE - 150 (decimal)
(C) COUNT: 300k (int) т.е. это общее количество записей будет.

Запросы к нему планируются:
 По Article (и по диапазону 50 значений) -> на выходе словарь где ключ регион, а значение общий COUNT по всем SIZE
 по Region, на выходе словарь, где ключ A, значение - общий COUNT по всем Size
 и др. агрегирующие в разных комбинациях.

Обновление тоже будет частое, операций 100 в минуту. (но если это критично, можно попобовать реже)

В подкастиках слышал, что postgres если правильно настроить под свою задачу всегда может выручить. Вот как на ваш взгляд, можно это через реляционку делать? какие индексы, какие настройки порекомендуете?

Кейс не редкий (типичный интернет магазин), если не postgres, то подскажите что тут можно использовать
источник

am

a m in pgsql – PostgreSQL
Я почти ничего не понял по схеме, но полмиллона записей и полтора апдейта в секунду — это ерунда даже для свежеустановленного постгреса, можете брать.
источник

am

a m in pgsql – PostgreSQL
Article. Артикул, е-мое.
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
> Вот как на ваш взгляд, можно это через реляционку делать?

постгрес как раз под ваш случай, так что подойдет

> какие индексы, какие настройки порекомендуете?

для начала можно обойтись теми что создаются при указании primary ключей, дальше уже ориентироваться по тому какие запросы будут в бд
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
ну и uuid - десять раз подумайте насколько оно оправдано у вас, и нет ли возможности заменить его на bigint
источник

R

Radist in pgsql – PostgreSQL
Alexey Lesovsky
ну и uuid - десять раз подумайте насколько оно оправдано у вас, и нет ли возможности заменить его на bigint
Вроде бы uuid вполне быстрый, если только не хранить его в виде строк. При таких нагрузках разницы не должно быть.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexey Stavrov
Спасибо.

> кстати, зачем

Увидел такого рода запрос, где случайно в from добавили доп. таблицу очень большого размера.
В итоге на pg9.5 делается seq. scan по этой таблице и запрос работает в 30 000 медленнее.

Стало интересно, как ведёт себя pg в этом случае и что может пойти не так.

Ваш комментарий взят из статьи про CTE. Я бы предположил, что это может относиться только к CTE, когда в разных sub-statement-ах обновляется одна и та же строка.
Тогда см. комментарии про TM_SelfModified в src/backend/executor/nodeModifyTable.c
* The target tuple was already updated or deleted by the
* current command, or by a later command in the current
* transaction.  The former case is possible in a join UPDATE
* where multiple tuples join to the same target tuple. This
* is pretty questionable, but Postgres has always allowed it:
* we just execute the first update action and ignore
* additional update attempts.

Всё равно неизвестно, какое из обновлений в таком случае будет первым (потому и questionable, я думаю), так что какой смысл это знать? ;) Исправить ошибку в запросе, да и всё.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Radist
Вроде бы uuid вполне быстрый, если только не хранить его в виде строк. При таких нагрузках разницы не должно быть.
Вообще-то, "должна" (т.е. теоретически) и нередка на практике.
А уж что в benchmarks можно намерять — вообще жуть. ;)
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
Добрый день, подскажите как дропнуть репликацию в 9.6, при использовании select pg_drop_replication_slot('slot_name'); - просит имя слота репликации, но имя слота я не вижу
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
задача остановить репликацию чтобы сделать бекап, построить индекс и опять запустить репликацию
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
как индекс построить и запустить репликацию уже знаю
источник

MZ

Michael マイケル Zhilin ... in pgsql – PostgreSQL
Шипулин Алексей
Добрый день, подскажите как дропнуть репликацию в 9.6, при использовании select pg_drop_replication_slot('slot_name'); - просит имя слота репликации, но имя слота я не вижу
1) Остановить реплику.
2) pg_xlog_replay_pause - но это скорее поставит на паузу, нежели остановит wal sender/receiver.
источник

MZ

Michael マイケル Zhilin ... in pgsql – PostgreSQL
А зачем останавливать репликацию для бекапа?
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
нет надо остановить, потому что прод, чтобы данные не улетели на слейв
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
Michael マイケル Zhilin ジリン
А зачем останавливать репликацию для бекапа?
сделать бекап (на всякий случай - если что пойдёт не так) и потом построить индекс по столбцу
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
Michael マイケル Zhilin ジリン
А зачем останавливать репликацию для бекапа?
чтобы откатиться, делать будут другие, могут накосячить
источник

MZ

Michael マイケル Zhilin ... in pgsql – PostgreSQL
тогда наверно достаточно pg_xlog_replay_pause. С большой вероятностью всё пройдёт успешно, поэтому sender/receiver лучше не останавливать.

И да, перенастроить репликацию чтобы она использовала replication слоты )
источник

ША

Шипулин Алексей... in pgsql – PostgreSQL
собрал стенд пишу инструкцию, что не так ?
источник