天天看點

【DB吐槽大會】第15期 - PG 沒有全局臨時表

背景

1、産品的問題點

  • PG 沒有全局臨時表

2、問題點背後涉及的技術原理

  • PG 的臨時表是使用時建立, 結構定義在1個會話内有效. 每次建立臨時表時, 需要在pg_class, pg_stats, pg_attribute等中繼資料中插入臨時表的對象資料、統計資訊資料、字段定義資料等. 在會話結束是再從這些中繼資料表中删除.

3、這個問題将影響哪些行業以及業務場景

  • 頻繁使用臨時表的業務, 例如将業務邏輯放入資料庫存儲過程中, 使用臨時表來存放一些中間計算結果.

4、會導緻什麼問題?

  • 中繼資料表、中繼資料表對應的索引膨脹.
  • 使用不便, 每次使用臨時表都需要重新建立.

5、業務上應該如何避免這個坑

  • 目前帶來的膨脹副作用基本無解.
  • 可以使用一些方法自動建立臨時表, 而不需要每次建立
  • 使用array或者json代替temp table.

6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題

  • 管理成本增加
  • array, json的單值上限是1G, 有使用局限性.

7、資料庫未來産品疊代如何修複這個坑

  • 有一些patch, 希望核心層支援全局臨時表

https://github.com/digoal/blog/blob/master/202109/20210902_03.md#postgresql-%E8%AE%B8%E6%84%BF%E9%93%BE%E6%8E%A5 https://github.com/digoal/blog/issues/76