Size: a a a

pgsql – PostgreSQL

2021 January 28

⌬C

⌬ Richard Cooper in pgsql – PostgreSQL
не подскажете, при каких условиях может возникнуть такая ошибка:
ERROR:  malformed array literal: "4610e809-717a-46f8-887c-9f0a6c0b1e50"
DETAIL:  Array value must start with "{" or dimension information.
CONTEXT:  PL/pgSQL function somefunv(date,date) line 9 at SQL statement
SQL state: 22P02


я пытаюсь в 9 строчке запихнуть результат селекта в переменную массив
источник

АО

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

JS

John Smith in pgsql – PostgreSQL
Переслано от John Smith
Добрый день
PostgreSQL
Мне нужно хранимку вызвать множество раз с параметрами из массива:
SELECT schedule.get_employee_job_available_intervals( t.i, '2021-01-25' )
  FROM ( SELECT UNNEST( array[ 4, 5 ] ) i ) t;

Проблема в том, что хранимка возвращает SETOF mytable, а в таком виде мне приходит CSV. Даже когда я делаю так, то всё равно остается CSV:
SELECT e.* FROM (
  SELECT schedule.get_employee_job_available_intervals( t.i, '2021-01-25' )
     FROM ( SELECT UNNEST( array[ 4, 5 ] ) i ) t ) e;

Как можно победить проблему так, чтобы и параметры подтягивались из массива, и возвращалась полноценная выборка?
источник

M

Milkhael in pgsql – PostgreSQL
John Smith
Переслано от John Smith
Добрый день
PostgreSQL
Мне нужно хранимку вызвать множество раз с параметрами из массива:
SELECT schedule.get_employee_job_available_intervals( t.i, '2021-01-25' )
  FROM ( SELECT UNNEST( array[ 4, 5 ] ) i ) t;

Проблема в том, что хранимка возвращает SETOF mytable, а в таком виде мне приходит CSV. Даже когда я делаю так, то всё равно остается CSV:
SELECT e.* FROM (
  SELECT schedule.get_employee_job_available_intervals( t.i, '2021-01-25' )
     FROM ( SELECT UNNEST( array[ 4, 5 ] ) i ) t ) e;

Как можно победить проблему так, чтобы и параметры подтягивались из массива, и возвращалась полноценная выборка?
Нужно schedule.get_employee_job_available_intervals перенести в lateral. Или обернуть (schedule.get_employee_job_available_intervals(…)).*
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Артем Орлов
Добрый день, подскажите систему мониторинга для postgres, которая может мониторить какие запросы, сколько раз, сколько времени, с каким параметрами
с параметрами не выйдет, т.к. pg_stat_statements специально нормализует параметры для “склейки” запросов.
есть планы добавить в качестве примера набор праматров когда запрос встречается в первый раз, но это только пример и не ясно когда эти планы реализуются
сами параметры есть в логах, их парсит pgBadger.

без параметров лучше всего, КМК, okmeter.io. можно искать удобные вам экспортёры в графану. или PoWa.
источник

АО

Артем Орлов... in pgsql – PostgreSQL
Victor Yegorov
с параметрами не выйдет, т.к. pg_stat_statements специально нормализует параметры для “склейки” запросов.
есть планы добавить в качестве примера набор праматров когда запрос встречается в первый раз, но это только пример и не ясно когда эти планы реализуются
сами параметры есть в логах, их парсит pgBadger.

без параметров лучше всего, КМК, okmeter.io. можно искать удобные вам экспортёры в графану. или PoWa.
можете скинуть ссылку на KMK?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Артем Орлов
можете скинуть ссылку на KMK?
КМК == Как Мне Кажется, IMHO
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
antuan
> broken by design.
всё просто. если пятисотка придет реальному клиенту на ui, он сам тыкнет кнопочку ещё раз. а автотестеры так делать не хотят :)

> Можете показать \d таблицы и запросы, конечно...
https://gist.github.com/aCLr/c6afdf89607e55763cefc4f4cf913b4d
А зря. Если бы оно было, сейчас бы у Вас этой проблемы не было. ;)
У меня сейчас нет времени подробно смотреть, извините. Но тут у нас были эксперты, утверждавшие, что можно запросто "решить" любой deadlock. ;)
Подождите, может они посмотрят...

Кстати, Вы его уже воспроизвели на тестовых данных (иначе как Вы будете проверять, сработало что-то или нет)?
источник

АО

Артем Орлов... in pgsql – PostgreSQL
Victor Yegorov
КМК == Как Мне Кажется, IMHO
Понял, спасибо)
источник

a

antuan in pgsql – PostgreSQL
Yaroslav Schekin
А зря. Если бы оно было, сейчас бы у Вас этой проблемы не было. ;)
У меня сейчас нет времени подробно смотреть, извините. Но тут у нас были эксперты, утверждавшие, что можно запросто "решить" любой deadlock. ;)
Подождите, может они посмотрят...

Кстати, Вы его уже воспроизвели на тестовых данных (иначе как Вы будете проверять, сработало что-то или нет)?
автотесты запускаешь - получаешь дедлок :)
в общем ладно. делать решил всё по очереди. тем более, что там уже архитектура такая, что все операции с этой таблицей, кроме одной, которая дедлок и вызывает, и так выполняется по очереди.

спасибо большое за помощь
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
antuan
автотесты запускаешь - получаешь дедлок :)
в общем ладно. делать решил всё по очереди. тем более, что там уже архитектура такая, что все операции с этой таблицей, кроме одной, которая дедлок и вызывает, и так выполняется по очереди.

спасибо большое за помощь
В автотестах постгреса есть специальные тесты для проверки успешности дедлоков :)
источник

a

antuan in pgsql – PostgreSQL
Роман Жарков
В автотестах постгреса есть специальные тесты для проверки успешности дедлоков :)
Значит автотесты нашего приложения работают хорошо?)
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
antuan
Значит автотесты нашего приложения работают хорошо?)
Ага. Но скорее всего их не для того делали
источник

A

Alex in pgsql – PostgreSQL
ребят, добавляя новую колонку в огромную таблицу alter table я получу lock?
источник

MZ

Michael マイケル Zhilin ... in pgsql – PostgreSQL
antuan
приветствую. не могу разгадать загадку, буду благодарен за помощь
итак, есть два запроса к одной и той же таблице, оба запроса делают select ... order by id asc for update. в результате одновременного выполнения запросов получаю дэдлок.
отличаются эти запросы условием. в одном where id in (...), во втором where user_id in (...)
explain выдает на первый запрос вот что
QUERY PLAN
LockRows  (cost=0.42..25.35 rows=3 width=26) (actual time=4.446..5.036 rows=3 loops=1)
 ->  Index Scan using availability_availabilityqueue_pkey on availability_availabilityqueue  (cost=0.42..25.32 rows=3 width=26) (actual time=4.401..4.974 rows=3 loops=1)
       Index Cond: (id = ANY ('{fffff3e0-0c09-40cb-9cc0-29d79f557fa4,ffffb9f7-d2f9-4695-b448-dfee8b904bd7,ffffb151-a171-4803-a08d-fe618c9f9b26}'::uuid[]))
Planning Time: 0.128 ms
Execution Time: 5.057 ms

кусок эксплейна второго запроса
QUERY PLAN
LockRows  (cost=5638.39..5666.69 rows=2264 width=26) (actual time=5.034..5.036 rows=0 loops=1)
 ->  Sort  (cost=5638.39..5644.05 rows=2264 width=26) (actual time=5.033..5.035 rows=0 loops=1)
       Sort Key: id
       Sort Method: quicksort  Memory: 25kB
...

в обычной ситуации причиной дедлока является отсутствие сортировки (ну или различные сортировки). тут же сортировка указана. но у одного из запросов отсутствует в explain. это несколько смущает...
добрый. А какая версия? попробовал и у меня получается честный план:
LockRows  (cost=13.60..13.63 rows=2 width=22)
  ->  Sort  (cost=13.60..13.61 rows=2 width=22)
        Sort Key: id
        ->  Bitmap Heap Scan on t1  (cost=8.57..13.59 rows=2 width=22)
              Recheck Cond: (id = ANY ('{3466fa37-9fbb-4d8b-ab2e-62c9ad6ec48d,3466fa37-9feb-4d8b-ab2e-62c9ad6ec48d}'::uuid[]))
              ->  Bitmap Index Scan on t1i  (cost=0.00..8.57 rows=2 width=0)
                    Index Cond: (id = ANY ('{3466fa37-9fbb-4d8b-ab2e-62c9ad6ec48d,3466fa37-9feb-4d8b-ab2e-62c9ad6ec48d}'::uuid[]))
Интересно как получить план без Sort.
источник

MZ

Michael マイケル Zhilin ... in pgsql – PostgreSQL
вопрос отпадает
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Michael マイケル Zhilin ジリン
добрый. А какая версия? попробовал и у меня получается честный план:
LockRows  (cost=13.60..13.63 rows=2 width=22)
  ->  Sort  (cost=13.60..13.61 rows=2 width=22)
        Sort Key: id
        ->  Bitmap Heap Scan on t1  (cost=8.57..13.59 rows=2 width=22)
              Recheck Cond: (id = ANY ('{3466fa37-9fbb-4d8b-ab2e-62c9ad6ec48d,3466fa37-9feb-4d8b-ab2e-62c9ad6ec48d}'::uuid[]))
              ->  Bitmap Index Scan on t1i  (cost=0.00..8.57 rows=2 width=0)
                    Index Cond: (id = ANY ('{3466fa37-9fbb-4d8b-ab2e-62c9ad6ec48d,3466fa37-9feb-4d8b-ab2e-62c9ad6ec48d}'::uuid[]))
Интересно как получить план без Sort.
Оценки другие, наверное.
Т.е.
SET enable_bitmapscan = off;

да и всё.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Alex
ребят, добавляя новую колонку в огромную таблицу alter table я получу lock?
однозначно. вопрос в том, как долго будете ждать лока и как долго ALTER будет работать.
источник

am

a m in pgsql – PostgreSQL
Чего? Nullable моментально добавляется же.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
a m
Чего? Nullable моментально добавляется же.
Lock будет в любом случае. "Моментально" будет только после того, как его удастся получить.
источник