Как я могу сделать атомарный выбор, используя несколько запросов в PSQL? - PullRequest
0 голосов
/ 18 апреля 2019

Допустим, у меня есть postgresql db с 2 таблицами: пользователь и отправка, и я делаю:

SELECT * FROM User;
SELECT * FROM Submission;

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

Итак, у меня есть 2 вопроса:

  1. Как можно атомарно извлечь данные из разных таблиц без какого-либо соединения или явной блокировки? Чтобы быть уверенным, что никакие изменения не применяются ни к одной таблице между запросами

  2. Какие запросы гарантируют атомарное поведение? SELECT с INNER JOIN работает атомарно?

1 Ответ

0 голосов
/ 18 апреля 2019

Выполните оба оператора в одной транзакции , для которой установлено значение repeatable read.

Цитата из руководства

Repeatable Read уровень изоляции видит только данные, зафиксированные до начала транзакции;он никогда не видит ни непереданных данных, ни изменений, зафиксированных во время выполнения транзакций параллельными транзакциями.


И да, один оператор всегда атомарен.Он никогда не увидит изменений в базовых данных во время работы, даже когда эти изменения зафиксированы, пока оператор еще выполняется.

...