我根據 tstzrange 型別的列對表進行了磁區
CREATE TABLE schedule_slots
(
id int8 NOT NULL DEFAULT nextval('schedule_slots_id_seq'::regclass),
time_range tstzrange NOT NULL,
CONSTRAINT schedule_slots_pkey2 PRIMARY KEY (id, time_range)
) partition by range(time_range);
CREATE
INDEX time_range_idx2 ON schedule_slots USING gist (time_range);
在磁區下創建:
CREATE TABLE schedule_slots_part1 PARTITION OF schedule_slots
FOR VALUES FROM ('[2022-06-01 00:00:00-07,2022-06-01 23:59:59-07)') to ('[2022-09-01 00:00:00-07,2022-09-01 23:59:59-07)');
CREATE TABLE schedule_slots_part2 PARTITION OF schedule_slots
FOR VALUES FROM ('[2022-09-01 00:00:00-07,2022-09-01 23:59:59-07)') to ('[2022-12-01 00:00:00-07,2022-12-01 23:59:59-07)');
CREATE TABLE schedule_slots_part3 PARTITION OF schedule_slots
FOR VALUES FROM ('[2022-12-01 00:00:00-07,2022-12-01 23:59:59-07)') to ('[2023-02-01 00:00:00-07,2023-02-01 23:59:59-07)');
CREATE TABLE schedule_slots_part4 PARTITION OF schedule_slots
FOR VALUES FROM ('[2023-02-01 00:00:00-07,2023-02-01 23:59:59-07)') to ('[2023-05-01 00:00:00-07,2023-05-01 23:59:59-07)');
CREATE TABLE schedule_slots_part5 PARTITION OF schedule_slots
FOR VALUES FROM ('[2023-05-01 00:00:00-07,2023-05-01 23:59:59-07)') to ('[2023-08-01 00:00:00-07,2023-08-01 23:59:59-07)');
CREATE TABLE schedule_slots_part6 PARTITION OF schedule_slots
FOR VALUES FROM ('[2023-08-01 00:00:00-07,2023-08-01 23:59:59-07)') to ('[2023-11-01 00:00:00-07,2023-11-01 23:59:59-07)');
但是下面的查詢正在搜索所有磁區,而不是僅搜索應該包含此資料的磁區
select id, time_range from schedule_slots where time_range <@ tstzrange('2022-12-01 00:00:00-07','2023-02-01 23:59:59-07', '[]') ;

我努力了
SET enable_partition_pruning = on;
I have updated the db parameter constraint_exclusion to on
但仍然沒有運氣。請讓我知道我錯過了什么。提前致謝
uj5u.com熱心網友回復:
磁區和磁區修剪不支持 GiST 運算子類。檔案說:
范圍和串列磁區需要 btree 運算子類,而散列磁區需要散列運算子類。如果沒有明確指定運算子類,將使用適當型別的默認運算子類;如果不存在默認運算子類,則會引發錯誤。
所以沒有機會按照你想要的方式進行磁區修剪。
我認為您的磁區策略有問題。如果你磁區的原因是為了實作磁區修剪,那你就有問題了。您可能獲得某種程度有效的磁區修剪的唯一方法是附加條件:
select id, time_range
from schedule_slots
where time_range <@ tstzrange('2022-12-01 00:00:00-07','2023-02-01 23:59:59-07', '[]')
and time_range > tstzrange('2022-12-01 00:00:00-07','2023-02-01 23:59:59-07', '[]');
附加條件不應改變查詢結果,但允許磁區修剪。在這個例子中,這不會有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536552.html
標籤:postgresql分区
上一篇:使用dotConnectForPostgreSQL提供程式將特殊字符插入到PostgreSQL中
下一篇:每次我嘗試在資料庫中添加資料時,我總是收到錯誤訊息:SQLSTATE[42703]:Undefinedcolumn:7ERROR:column
