GET DIAGNOSTICS ROW_COUNT с одновременными операторами

Я хотел бы использовать GET DIAGNOSTICS integer_var = ROW_COUNT в коде plpgsql, чтобы получить количество строк, вставленных в таблицу оператором INSERT INTO.

Если я запускаю несколько операторов INSERT INTO почти одновременно, могу ли я быть уверен, что GET DIAGNOSTICS правильно возвращает количество вставленных строк для каждого оператора?

Я могу проиллюстрировать это на примере, если это происходит в следующей последовательности:

  1. Пользователь А запускает оператор вставки в, который вставляет 10 строк в таблицу.
  2. пользователь B запускает оператор вставки в, который вставляет 5 строк в таблицу.
  3. Пользователь А звонит GET DIAGNOSTICS rowcount = ROW_COUNT;
  4. Пользователь Б звонит GET DIAGNOSTICS rowcount = ROW_COUNT;

Получит ли пользователь А rowcount из 10, а пользователь Б из 5? Или оба получат 5?


person Thomas    schedule 08.12.2014    source источник
comment
Предполагая, что оба пользователя выполняют отдельные транзакции...   -  person Erwin Brandstetter    schedule 08.12.2014


Ответы (1)


Оператор PostgreSQL PLpgSQL GET DIAGNOSTICS показывает информацию о последнем операторе в транзакции (внутри транзакции вы изолированы от других пользователей). Таким образом, пользователи A увидят 10, а пользователь B увидит 5.

PostgreSQL представляет собой базу данных ACID, и пользователи (обычно) строго изолированы. За один сеанс вы не сможете детально рассмотреть работу других пользователей. Максимум что можно увидеть зафиксированные изменения данных.

person Pavel Stehule    schedule 08.12.2014