Thursday, June 29, 2023

Postgres 的一些好用的功能:Auth, jsonb, validation on json, ltree, Expression based index

1. Postgres 可以利用 pg_crypto 這個 extension ,快速地做出 Authentication。參考這篇

2. Postgres 的 jsonb column ,這可以用來快速地搬移 Firestore  到 Postgres 。參考這篇

3. Postgres 可以對 json column 加上 schema validation。參考這篇

4. Postgres 可以利用 ltree 這個 extension 來記錄 tree 類型的資料結構。參考這篇

5. Postgres 也支援 expression based unique index 。參考這篇

第五項多加一些說明:

在 Clojure 的世界,我想找一個簡單易用的 worker queue ,但是又懶得架 Redis,所以 Proletarian 是選項之一。(Proletarian 是一個輕薄的 job queue library on top of Postgres)

然而,使用 Proletarian 也是有一些缺點:

- 比方說,job 的 payload 會被 Proletarian library 先做成 Transit ,再轉換成 text 來儲存。這時,如果你要放進 worker queue 裡的 job ,你想要對其施加一些 unique constriaint 時,該怎麼做呢?


之前我想不出做法,因為整個 payload 都被先打包成一包做成 text ,總覺得 unique constraint 加不上去。無奈之下,只好在 application layer 去實作這個 unique constraint 的檢查,實在有夠難寫。


最近研究 Postgres 才發現,有一個很犯規的東西叫做 expression based UNIQUE INDEX。用了這個的話,就可以輕易地對 text 或是 json 之類的資料的部分集合,加上 unique constraint了。