#sql #postgresql
#sql #postgresql
Вопрос:
Каков механизм блокировки по умолчанию в PostgresSQL при создании таблицы? это строка, страница, уровень таблицы или что-то еще?
Возможно ли указать блокировку на уровне строк при создании таблицы? что-то вроде приведенного ниже в Sybase.
CREATE TABLE user
(...)
LOCK DATRAROWS
Или нам не нужно указывать какую-либо стратегию блокировки и предоставить Postgres выбирать лучшую, пока мы имеем дело с CRUD?
Приветствия!
Комментарии:
1. Я полагаю, что postgres всегда использует наименее навязчивый механизм блокировки из возможных — в большинстве случаев блокировку на уровне строк MVCC.
2. Зачем вам это нужно делать?
3. Я исхожу из пространства Sybase, где мы обычно явно устанавливали блокировку потоков данных, и здесь, в моем конкретном случае использования, я не хочу, чтобы Postgres использовал что-либо другое, кроме блокировки на уровне строк. Теперь я понимаю, что в PGSql все немного по-другому 🙂
Ответ №1:
Вы ничего не можете указать во время создания ТАБЛИЦЫ для PostgreSQL. Во время выполнения вы можете выбрать строки FOR UPDATE
или FOR SHARE
. Если вы переходите на PostgreSQL с другой платформы, вам следует просмотреть документы по управлению параллелизмом.
Ответ №2:
При создании таблицы блокировки нет. О блокировке можно прочитать здесь: http://www.postgresql.org/docs/9.0/static/explicit-locking.html