Postgresql Запись и чтение из базы. Очередь на чтение и запись

Делаю не большое приложение для себя.

Возник такой вопрос:

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

Я хочу запретить чтение и запись из таблицы пока кто то записывает в нее данные. Для того что бы данные всегда были актуальные и верные. Я пытался найти инфу и понял что по умолчанию в PostgreSQL нет такова и допускается одновременная запись в несколько потоков в одну таблицу.

Возможно я ошибаюсь. Хотелось бы услышать как на самом деле.

Если я все таки правильно понял то возможно ли запретить запись и считывание из таблицы пока в нее записываются какие то данные.


Ответы (1 шт):

Автор решения: Roman C

допускается одновременная запись в несколько потоков в одну таблицу.

Да, но только синхронизация запросов осуществляется уже на уровне базы данных, которая выставляет блокировки в зависимости от уровня изоляции транзакций. Нужно понимать, что такое транзакции на уровне БД, и как происходит запись и сохранение информации по запросам.

Более или менее подробную информацию можно найти в следующей статье: Блокировки и уровни изоляции InnoDb в MySQL.

Хотя, статья относится к отдельной БД , но механизмы, используемые ей, аналогичны в любой базе данных, построенных на транзакциях.

Вот ещё одна статья, описывающая Уровни изоляции транзакций с примерами на PostgreSQL.

возможно ли запретить запись и считывание из таблицы пока в нее записываются какие то данные.

Да, для этого надо установить уровень изоляции транзакции —serializable для таблицы, это даже можно выполнить с помощью SQL.

→ Ссылка