3
我想用以前未知的值在Postgres中分區表。在我的場景中,該值將是device_id,它是一個字符串。Postgres中按字符串標識符進行動態表分區
這是目前的情況:
表「device_data」 - 存儲從設備發送的傳感器數據,通過DDL定義:
CREATE TABLE warehouse.device_data (
id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('device_data_id_seq'::regclass),
device_id TEXT NOT NULL,
device_data BYTEA NOT NULL,
-- contains additional fields which are omitted for brevity
received_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now()
);
表目前擁有數以百萬計的記錄和查詢冒着巨大多少時間。大多數查詢包含WHERE device_id='something'
子句。
解決方案我想到的是爲每個device_id
創建表分區。
是否有可能在Postgres中爲每個device_id
創建表分區?
我通過Postgres文檔和我發現的幾個例子,但他們都使用固定邊界來創建分區。我的解決方案將需要:
- 動態創建新的表分區時新
device_id
是第一 遇到 - 商店現有的分區,如果
device_id
是 已知和分區爲device_id
已經存在
我希望這樣做可以使用表分區,因爲它可以跨多個device_id
s查詢。
爲什麼你想通過' device_id'? 'device_id'的簡單**索引**將完成這項工作。性能問題應該包括'EXPLAIN ANALYZE'和一些關於表格大小,索引,當前時間表現,期望時間等的信息。'Slow'是一個相對術語,我們需要一個真實值來比較。 –