Предотвращение возможных PostgreSQL GU C параметров гонки? - PullRequest
0 голосов
/ 21 марта 2020

Допустим, у меня есть два клиента базы данных, выполняющих запросы к кластеру PostgreSQL параллельно. Я решаю, что хочу, чтобы один из них использовал max_parallel_workers_per_gather в 2, а другой в 6.

Итак, клиент №1 будет

exec("SET max_parallel_workers_per_gather=2; // A
SELECT * FROM large_scan; // B
");

Клиент №2 будет делать

exec("SET max_parallel_workers_per_gather=6; // C
SELECT * FROM other_large_scan; // D
");

Я ожидаю последовательность A-> B -> C -> D, чтобы и B, и D выполнялись одновременно с указанным параметром. Но возможна ли последовательность A -> C -> B-> D? Это дало бы обоим клиентам 6, что не то, что я хочу!

Я использую SPI , который, я считаю, не поддерживает асинхронное выполнение.

1 Ответ

1 голос
/ 21 марта 2020

Установка параметра в сеансе обычно является локальной для этого сеанса. Порядок выполнения может быть A -> C -> B-> D, но это не значит, что B обратит внимание на то, что C сделал.

...