- Mastering PostgreSQL 10
- Hans Jürgen Sch?nig
- 211字
- 2021-06-30 19:03:50
Considering alternative solutions
There is an alternative solution to the problem. Consider the following example: you are asked to write an application generating invoice numbers. The tax office might require you to create invoice numbers without gaps and without duplicates. How would you do it? Of course, one solution would be a table lock. However, you can really do better. Here is what I would do:
test=# CREATE TABLE t_invoice (id int PRIMARY KEY);
CREATE TABLE
test=# CREATE TABLE t_watermark (id int); CREATE TABLE
test=# INSERT INTO t_watermark VALUES (0); INSERT 0
test=# WITH x AS (UPDATE t_watermark SET id = id + 1 RETURNING *) INSERT INTO t_invoice SELECT * FROM x RETURNING *;
id
----
1
(1 row)
In this case, I introduced a table called t_watermark. It contains just one row. The WITH will be executed first. The row will be locked and incremented, and the new value will be returned. Only one person can do this at a time. The value returned by the CTE is then used in the invoice table. It is guaranteed to be unique. The beauty is that there is only a simple row lock on the watermark table; no reads will be blocked in the invoice table. Overall, this way is more scalable.
- 后稀缺:自動化與未來工作
- 計算機應(yīng)用
- 過程控制工程及仿真
- 智能傳感器技術(shù)與應(yīng)用
- Canvas LMS Course Design
- Hands-On Machine Learning on Google Cloud Platform
- Learning Apache Spark 2
- 計算機控制技術(shù)
- Hands-On Cybersecurity with Blockchain
- DevOps:Continuous Delivery,Integration,and Deployment with DevOps
- 網(wǎng)站前臺設(shè)計綜合實訓(xùn)
- 內(nèi)??刂萍捌鋺?yīng)用
- ESP8266 Robotics Projects
- R Data Analysis Projects
- 傳感器原理與工程應(yīng)用