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

Кога се избира за заключване и отключване на актуализиране?

Заключването се извършва по време на (обикновено в началото или близо до) изпълнението на команда. Заключването (с изключение на препоръчителните) се освобождава само когато транзакция се извършва или се връща назад. Няма FOR UNLOCK , нито има UNLOCK команда за обръщане на ефектите от LOCK на ниво таблица команда. Всичко това е обяснено в раздела за контрол на паралелността в документацията на PostgreSQL.

Трябва да ангажирате или отмените транзакцията си, за да освободите заключванията.

Освен това всъщност няма смисъл да питате „изтрит ли е този ред вече от друга едновременна транзакция“. Всъщност не се изтрива, докато транзакцията, която е изтрила реда, не се ангажира... и дори тогава тя може да е изтрила и повторно вмъкнала реда или друга едновременна транзакция може да е вмъкнала реда отново.

Случайно изграждате ли система за опашка от задачи или опашка за съобщения, защото ако е така, този проблем е решен и не бива да се опитвате да преоткривате това необичайно сложно колело. Вижте PGQ, ActiveMQ, RabbitMQ, ZeroMQ и др. (Бъдещите версии на PostgreSQL може да включват FOR UPDATE SKIP LOCKED тъй като това се тества, но не е пуснато към момента на писане).

Предлагам ви да публикувате нов въпрос с по-подробно описание на основния проблем, който се опитвате да разрешите. Предполагате, че решението на проблема ви е „разберете дали редът вече е изтрит“ или „отключете реда“. Това вероятно всъщност не е решението. Това е малко като някой да каже "къде да купя бензин", когато моторът му не върви, така че те предполагат, че е свършило горивото. Горивото не е проблемът, проблемът е, че моторите за тласкане не поемат гориво и трябва да ги въртите с педали.

Обяснете фона. Обяснете какво се опитвате да постигнете. Преди всичко друго, не публикувайте псевдокод, публикувайте действителния код, с който имате проблеми , за предпочитане в самостоятелна и работеща форма.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо функциите PL/pgSQL могат да имат страничен ефект, докато SQL функциите не могат?

  2. бърз произволен избор на ред в Postgres

  3. Как да скриете декорацията на набора от резултати в изхода на Psql

  4. Вземете таблица и колона, притежаващи последователност

  5. Разлика между език sql и език plpgsql във функциите на PostgreSQL