Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 约束排除不适用于分区表_Sql_Postgresql_Postgresql 9.2_Database Partitioning - Fatal编程技术网

Sql 约束排除不适用于分区表

Sql 约束排除不适用于分区表,sql,postgresql,postgresql-9.2,database-partitioning,Sql,Postgresql,Postgresql 9.2,Database Partitioning,我有以下设置(简化摘录): 现在插入器工作得很好。我的问题是约束排除似乎不适用于选择: SELECT * FROM my_table WHERE TENANT_ID='anyVal'; 解释此查询将返回以下结果: postgres=# EXPLAIN SELECT * FROM my_table WHERE TENANT_ID='anyVal'; QUERY PLAN

我有以下设置(简化摘录):

现在插入器工作得很好。我的问题是约束排除似乎不适用于选择:

SELECT * FROM my_table WHERE TENANT_ID='anyVal';
解释此查询将返回以下结果:

postgres=# EXPLAIN SELECT * FROM my_table WHERE TENANT_ID='anyVal';
                                               QUERY PLAN                                                   
----------------------------------------------------------------------------------------------------------------
 Append  (cost=0.00..81.53 rows=11 width=6401)
   ->  Seq Scan on my_table  (cost=0.00..0.00 rows=1 width=6401)
         Filter: (tenant_id = 'bla'::bpchar)
   ->  Index Scan using idx_tenant_ids_00 on part_my_table_00 (cost=0.14..8.15 rows=1 width=6401)
         Index Cond: (tenant_id = 'bla'::bpchar)
   ->  Index Scan using idx_tenant_ids_01 on part_my_table_01 (cost=0.14..8.15 rows=1 width=6401)
         Index Cond: (tenant_id = 'bla'::bpchar)
我本以为只有一个分区会被扫描。有人能帮我吗


提前谢谢

您必须添加一个与分区约束匹配的
,其中
条件:

SELECT * FROM my_table
   WHERE TENANT_ID='anyVal'
     AND select_partition(TENANT_ID, 2) = select_partition('anyVal', 2);

此外,我认为您应该将
h\u int
标记为
IMMUTABLE
,并将
select\u partition
标记为
IMMUTABLE
。他们是(而且应该是),告诉数据库是个好主意。但这与您的问题无关。

您必须添加一个与分区约束匹配的
条件:

SELECT * FROM my_table
   WHERE TENANT_ID='anyVal'
     AND select_partition(TENANT_ID, 2) = select_partition('anyVal', 2);

此外,我认为您应该将
h\u int
标记为
IMMUTABLE
,并将
select\u partition
标记为
IMMUTABLE
。他们是(而且应该是),告诉数据库是个好主意。但这与您的问题无关。

检查约束中的表达式与where子句中的表达式不匹配。如何通过计算
where-tenant\u id=**
值的散列来实现约束排除?检查约束中的表达式与where子句中的表达式不匹配。我将如何实现通过计算
WHERE tenant\u id=**
值的散列来实现约束排除?谢谢,这就解释了它!谢谢,这就解释了!