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

  • Mastering PostgreSQL 9.6
  • Hans Jurgen Schonig
  • 245字
  • 2021-07-09 19:57:13

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 that:

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 that, PostgreSQL offers a couple of functions. If you use df *try*advisory*, PostgreSQL returns a list of all available functions.

主站蜘蛛池模板: 卢龙县| 鄂托克前旗| 深泽县| 南江县| 巫山县| 墨脱县| 麻城市| 叶城县| 驻马店市| 青州市| 手游| 谷城县| 金华市| 岑溪市| 彭山县| 芜湖市| 涞水县| 延庆县| 西乡县| 西畴县| 阿坝县| 临沭县| 烟台市| 乌鲁木齐县| 昌黎县| 普格县| 伊川县| 绍兴市| 合作市| 安宁市| 衡东县| 张家口市| 南郑县| 辽阳市| 永平县| 台前县| 皮山县| 文昌市| 临邑县| 中西区| 永济市|