Возможно ли создать блокировку для определенного значения в инструкции INSERT в PostgreSQL?Блокировка PostgreSQL INSERTS с определенными значениями?
Позволяет сказать, у меня есть эта таблица:
CREATE TABLE IF NOT EXISTS bookings (
bookingID SERIAL PRIMARY KEY,
tableID integer REFERENCES tables ON DELETE CASCADE,
startTime timestamp NOT NULL,
endTime timestamp NOT NULL,
);
Теперь, если сделка-блок с вкладышем запускается, я могу создать блокировку для всех других вставок с тем же TABLEID и тем же днем в течение сделка время?
Таким образом, второе бронирование для того же tableID должно ждать завершения первого. И после этого можно снова проверить, если INSERT все еще возможен. Значит, это в основном ROW-lock для определенного значения в INSERTS.
Программа написана на Java, но я не хочу использовать синхронизированный блок из-за узкого места.
Спасибо за помощь
«* Я не хочу использовать синхронизированные-блок *» - почему вы считаете, что синхронизация на ресурсе базы данных более эффективна, чем синхронизация в коде Java? –
Насколько я знаю, если я использую 'synchronized', вся таблица« заблокирована », поэтому другие транзакции должны ждать. Но, если это возможно, я хочу только блокировать части таблицы для повышения эффективности. – FrediDoe
Другим вариантом является изоляция «SERIALIZABLE», но предложение EgorRogov использовать ограничения исключения является лучшим решением в этом случае. –