背景
1、産品的問題點
- PG 沒有全局臨時表
2、問題點背後涉及的技術原理
- PG 的臨時表是使用時建立, 結構定義在1個會話内有效. 每次建立臨時表時, 需要在pg_class, pg_stats, pg_attribute等中繼資料中插入臨時表的對象資料、統計資訊資料、字段定義資料等. 在會話結束是再從這些中繼資料表中删除.
3、這個問題将影響哪些行業以及業務場景
- 頻繁使用臨時表的業務, 例如将業務邏輯放入資料庫存儲過程中, 使用臨時表來存放一些中間計算結果.
4、會導緻什麼問題?
- 中繼資料表、中繼資料表對應的索引膨脹.
- 使用不便, 每次使用臨時表都需要重新建立.
5、業務上應該如何避免這個坑
- 目前帶來的膨脹副作用基本無解.
- 可以使用一些方法自動建立臨時表, 而不需要每次建立
- 使用array或者json代替temp table.
6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題
- 管理成本增加
- array, json的單值上限是1G, 有使用局限性.
7、資料庫未來産品疊代如何修複這個坑
- 有一些patch, 希望核心層支援全局臨時表