官术网_书友最值得收藏!

  • Mastering PostgreSQL 10
  • Hans Jürgen Sch?nig
  • 247字
  • 2021-06-30 19:03:51

Utilizing advisory locks

PostgreSQL has a highly efficient and sophisticated transaction machinery that is capable of handling locks in a really fine-grained and efficient way. Some years ago, some people came up with the idea of using this code to synchronize applications with each other.

Thus, advisory locks were born.

When using advisory locks, it is important to mention that they won't go away on COMMIT as normal locks do. Therefore, it is really important to make sure that unlocking is done properly and in a totally reliable way.

If you decide to use an advisory lock, what you really lock is a number. So, this is not about rows or data; it is really just a number. Here is how it works:

The first transaction will lock 15. The second transaction has to wait until this number has been unlocked again. The second session will even wait after the first one has committed. This is highly important as you cannot rely on the fact that the end of the transaction will nicely and miraculously solve things for you.

If you want to unlock all locked numbers, PostgreSQL offers the pg_advisory_unlock_all() function to do exactly this:

test=# SELECT pg_advisory_unlock_all(); 
pg_advisory_unlock_all 
------------------------

(1 row)

Sometimes, you might want to see if you can get a lock and error-out if it is not possible. To achieve this, PostgreSQL offers a couple of function, to see a list of all such available functions, at the command line, enter:  df *try*advisory*.

主站蜘蛛池模板: 宁陕县| 平陆县| 唐山市| 定日县| 江口县| 大连市| 麦盖提县| 潜江市| 乐清市| 孝义市| 安新县| 山丹县| 博客| 土默特右旗| 牟定县| 富蕴县| 河南省| 汝南县| 马山县| 邻水| 温泉县| 科尔| 若尔盖县| 武定县| 怀集县| 巴彦淖尔市| 广德县| 高安市| 肥东县| 辽宁省| 肇州县| SHOW| 桂平市| 金乡县| 静乐县| 南溪县| 大丰市| 龙陵县| 巴林左旗| 礼泉县| 阜南县|