PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Заключване на конкретен ред в postgres

Ако искате да заключите таблицата в конкретен избран ред, трябва да LOCK FIRST те използват FOR UPDATE / FOR SHARE statement.Например, във вашия случай, ако трябва да заключите първия ред, направете следното:

BEGIN;

LOCK TABLE person IN ROW EXCLUSIVE MODE;

-- BLOCK 1

SELECT * FROM person WHERE name = 'John' and money = 1 FOR UPDATE;

-- BLOCK 2

UPDATE person set name = 'John 2' WHERE name = 'John' and money = 1;

END;

В BLOCK1 преди SELECT декларация, че не правите нищо, само казвате на базата данни „Хей, ще направя нещо в тази таблица, така че когато го направя, заключете тази таблица в този режим“. Можете да изберете / актуализирате / изтриете всеки ред.

Но в BLOCK2 когато използвате FOR UPDATE заключвате този ред към други транзакции в конкретни режими (прочетете doc за повече информация). Ще бъде заключено, докато транзакцията приключи.

Ако имате нужда от пример, направете тест и опитайте да направите друг SELECT ... FOR UPDATE в BLOCK2 преди да приключи първата транзакция. Той ще изчака първата транзакция да приключи и ще избере веднага след нея.

Използвам го във функция за контрол на подпоследователности и е страхотно. Надявам се да ви хареса.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Настройка и поддръжка на PostgreSQL репликация с помощта на Ansible

  2. Използвайте множество конфликт_цели в клауза ON CONFLICT

  3. Архивиране на Postgresql DB Идеални практики

  4. Мигриране на PostgreSQL бази данни от On-Prem към облака с помощта на AWS RDS

  5. Мултинаемане с SQLAlchemy