Size: a a a

pgsql – PostgreSQL

2020 May 25

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ling Halph
понимаю что наглость, но вдруг кому не жалко подсказать.
нужно заменить значение столбца значением из другой таблицы, соответствие искать по первичным ключам обоих таблиц
написал запрос вида
UPDATE table1 SET value=(SELECT value FROM table2 WHERE id=table1.id)

выполняется уже 4 часа(по 350тыс записей в каждой таблице)
вохможно ли написать более быстрый запрос?
Вы бы EXPLAIN показали...
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ilya Kaznacheev
Это не статусы, а просто создание композитной сущности
Про статусы думали, но это не то. Нужно же еще созданные артифакты откатить, если процесс где-то по пути сфейлился
А если "артефакты" не учитывать, пока сущность не создана? Т.е. считать "черновиками"?
источник

О

Оля in pgsql – PostgreSQL
Vanya Leyn
Ребят, а не подскажите тулзу с помощью которой можно сделать ЕРД а потом из нее сгенерить скл?
источник

LH

Ling Halph in pgsql – PostgreSQL
Yaroslav Schekin
Вы бы EXPLAIN показали...
источник

LH

Ling Halph in pgsql – PostgreSQL
Konstantin K
merge into ... using ...
эта команда точно поддерживается в постгресе? 12.2 не распознает
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Подходящего индекса на events2 нет, получается?
И оценки стоимости какие-то слишком большие для 350тыс записей, кажется.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ling Halph
эта команда точно поддерживается в постгресе? 12.2 не распознает
Нет, MERGE нет в PostgreSQL.
источник

LH

Ling Halph in pgsql – PostgreSQL
Yaroslav Schekin
Подходящего индекса на events2 нет, получается?
И оценки стоимости какие-то слишком большие для 350тыс записей, кажется.
большинство строк одинаковые во всем, кроме value3
источник

KK

Konstantin Knizhnik in pgsql – PostgreSQL
Ilya Kaznacheev
Ок, с межконнектными сессиями вроде понятно (нет), сформулирую вопрос иначе
У нас есть сервис, которых хранит данные в постгресе
При этом есть многоступенчатые процессы создания данных, когда создается одна сущность, для нее другие и так далее, а если ошибка - то надо все откатывать (как, в общем то, и работает транзакция)

Распределенные транзакции (вроде saga) решили не делать, потому что у нас только у одного сервиса есть БД, а вот процесс создания может из разных мест приходить.

В итоге решили реализовать в рамках постгреса транзакции, но пока не понятно, как именно. Есть два варианта

1. использовать встроенные в постргес транзакции, но как-то держать их персистентно. То есть условно создается транзакция через begin, дальше некий ее ID передается через все запросы, и запрос в бд приурочивается к транзакции. Потом она завершается через коммит или роллбек, тоже по ID. При этом сами запросы в бд с этим ID транзакции могут выполнять разные реплики приложения, поэтому вариант хранить все это время коннект открытым не вариант. (могут быть разные коннекты)

2. если первый вариант реализовать не получится, то буду тоже самое делать руками, то есть писать в некую таблицу все события по созданию/изменению данных, а при роллбеке руками их откатывать
Посмотрите доклад https://www.youtube.com/watch?v=UjXKCewGr9s&feature=youtu.be&fbclid=IwAR1D5oqlpupHFSy_eDbP9BO-vOVvNhRqUnOQdIgAfg4IKNCUogDRUUghCoI

С каждой операцией связан некий  ID-шник транзакции, а в отдельной таблице задаётся статус транзакции (committed/aborted). Немножко надо пошаманить с delete-ами. Но вцелом это аналог того, как транзакции сделаны в Постгресе (с одтельной табличкой вместо CLOG).

Но при этом надо будет менять запросы, так чтобы они игнорировали незакомиченные ттранзакции. Если это не возможно или не удобно, то единственный способ -действительно хранить компенсирующие транзакции (т.е. транзакцию, устраняющую все изменения сделанные оригинальной транзакцией)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ling Halph
большинство строк одинаковые во всем, кроме value3
Хмм... каких строк, какой таблицы? ;)
И, всё же, сколько на самом деле записей в events2 и есть ли там индекс по UID?
источник

LH

Ling Halph in pgsql – PostgreSQL
Yaroslav Schekin
Хмм... каких строк, какой таблицы? ;)
И, всё же, сколько на самом деле записей в events2 и есть ли там индекс по UID?
учитывая что я не изучал тему индексов в скл, то вряд ли.
записей всего 361794
источник

s

sexst in pgsql – PostgreSQL
Роман Жарков
"скорее я пришёл к выводу что постгрес не может взаимодействовать со сборщиком статистики через сокеты. А они чаще всего используются с UDP. Поэтому предположил что у Андрея некорректно работает файрволл. На самом деле файрволл нужно всегда первым выключать при решении проблем, чтобы исключить фактор возможных  некорректных настроек файрволла"

Как оно мешало вакууму в сингл моде - я не догоняю.
Хренасебе кто-то даёт такое по чату диагностировать.
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
1С-ники очень тренированные :)
источник

СГ

Сергей Голод... in pgsql – PostgreSQL
И снова здравствуйте. Yaroslav, не знаю помните ли меня с проблемой выбора оптимального плана при использование версии постгреса для 1С
источник

LH

Ling Halph in pgsql – PostgreSQL
Yaroslav Schekin
Хмм... каких строк, какой таблицы? ;)
И, всё же, сколько на самом деле записей в events2 и есть ли там индекс по UID?
жесть, почитал про индексы, создал. и мой запрос выполнился за 2 секунды
источник

LH

Ling Halph in pgsql – PostgreSQL
спасибо за наводящий вопрос)
источник

СГ

Сергей Голод... in pgsql – PostgreSQL
вы мне помогали с разными вариантами настроек и в итоге выяснилось что проблема была не в ванильном постгресе, а в версии, которая патчится для совместимости с 1С
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Сергей Голод
И снова здравствуйте. Yaroslav, не знаю помните ли меня с проблемой выбора оптимального плана при использование версии постгреса для 1С
Добрый день!
Да, помню. Насколько я помню, то, что проблема была именно в patched PostgreSQL, мы выяснили сразу.
А вот в чём именно была проблема (просто любопытно)?
источник

СГ

Сергей Голод... in pgsql – PostgreSQL
теперь постгреспро выпустили версию, которая с одной стороны решила тот случай но привела к другому вопросу о правильности работы ванильного постгреса. Должен ли постгрес при пересоздании индекса использовать именно пересозданный, а не тот индекс, который более быстрый.
источник

СГ

Сергей Голод... in pgsql – PostgreSQL
что именно внесли в исходный код - мне неизвестно (исходники патчей публично недоступны)
источник