Postgresql
Postgresql 12 自定義雜湊函式
我有一個大表,我想分區。我要分區的欄位是一個包含編碼值的字元串,但顯示為儲存為字元串的整數。“數字”由 4 位數字組成。前兩個是我想要劃分的。例如,欄位值“1298”需要使用值 12 進行分區。我認為這對於具有自定義散列函式的散列分區非常有用。
供參考:
... WHERE TheField = '0123'
經常以或 的形式對此列進行查詢... WHERE TheField IN ('0123', '0145', '0232')
手動將每個值放入每個分區是不切實際的,因此我認為使用自定義雜湊函式將是一個實用的解決方案。
**實際問題:**如何製作此自定義雜湊函式並使用它來定義分區?
您可以按 分區
substr(thefield, 1, 2)
,但這樣做沒有意義,除非
- 您按該標準刪除數據
或者
- 您的查詢使用該表達式
您應該簡單地通過 hash on 進行分區
thefield
,然後您的兩個查詢都可以使用分區修剪。不需要自定義散列函式。
儘管這不是對創建自定義雜湊函式問題的真正答案,但我的整體問題的解決方案是 PostgreSQL 實際上支持文本欄位上的範圍分區,如mustaccio所示。
CREATE TABLE dept (id CHAR(4) PRIMARY KEY) PARTITION BY RANGE(id); CREATE TABLE dept_00 PARTITION OF dept FOR VALUES FROM ('0000') TO ('0099'); CREATE TABLE dept_01 PARTITION OF dept FOR VALUES FROM ('0100') TO ('0199'); ...