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

заключете редовете до следващия избор на postgres

Не мисля, че това е възможно. Не можете да блокирате достъп само за четене до таблица (освен ако този избор не е направен FOR UPDATE )

Доколкото мога да преценя, единственият шанс, който имате, е да използвате pg_advisory_lock() функция.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS

Но това изисква "ръчно" освобождаване на ключалките, получени чрез него. С това няма да получите автоматично отключване.

За да заключите редовете, ще ви трябва нещо подобно:

select pg_advisory_lock(id), * 
from 
( 
  select * table1 order by id limit 5
) t

(Обърнете внимание на използването на получената таблица за частта LIMIT. Вижте ръчната връзка, която публикувах за обяснение)

След това трябва да съхраните извлечените идентификатори и по-късно да извикате pg_advisory_unlock() за всеки ID.

Ако всеки процес винаги освобождава всички ID наведнъж, можете просто да използвате pg_advisory_unlock_all() вместо. Тогава няма да е необходимо да съхранявате извлечените идентификатори.

Обърнете внимание, че това ще не не позволява на другите да четат редовете, използвайки "нормални" селекции. Ще работи само ако всеки процес, който има достъп до тази таблица, използва същия модел за получаване на ключалките.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при запис на Dataframe от R към Redshift

  2. Windows PSQL команден ред:има ли начин да се разреши влизане без парола?

  3. PostgreSQL тригер за динамично генериране на кодове за множество таблици

  4. Получаване на грешка при картографиране на PostgreSQL LTREE колона в хибернация

  5. Конфигурирайте „Източник на данни“, за да се свържете с управляван Postgres сървър на Digital Ocean с SSL/TLS криптиране