Postgresql Запись и чтение из базы. Очередь на чтение и запись
Делаю не большое приложение для себя.
Возник такой вопрос:
Как ведет себя PostgreSQL, когда одновременно несколько запросов пытаются записать в таблицу.
Я хочу запретить чтение и запись из таблицы пока кто то записывает в нее данные. Для того что бы данные всегда были актуальные и верные. Я пытался найти инфу и понял что по умолчанию в PostgreSQL нет такова и допускается одновременная запись в несколько потоков в одну таблицу.
Возможно я ошибаюсь. Хотелось бы услышать как на самом деле.
Если я все таки правильно понял то возможно ли запретить запись и считывание из таблицы пока в нее записываются какие то данные.
Ответы (1 шт):
допускается одновременная запись в несколько потоков в одну таблицу.
Да, но только синхронизация запросов осуществляется уже на уровне базы данных, которая выставляет блокировки в зависимости от уровня изоляции транзакций. Нужно понимать, что такое транзакции на уровне БД, и как происходит запись и сохранение информации по запросам.
Более или менее подробную информацию можно найти в следующей статье: Блокировки и уровни изоляции InnoDb в MySQL.
Хотя, статья относится к отдельной БД , но механизмы, используемые ей, аналогичны в любой базе данных, построенных на транзакциях.
Вот ещё одна статья, описывающая Уровни изоляции транзакций с примерами на PostgreSQL.
возможно ли запретить запись и считывание из таблицы пока в нее записываются какие то данные.
Да, для этого надо установить уровень изоляции транзакции —serializable
для таблицы, это даже можно выполнить с помощью SQL.