mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Make tablesample work with partitioned tables.
This was an oversight in the original partitioning commit. Amit Langote, reviewed by David Fetter Discussion: http://postgr.es/m/59af6590-8ace-04c4-c36c-ea35d435c60e@lab.ntt.co.jp
This commit is contained in:
parent
6d493e1a01
commit
5dbdb2f799
@ -907,7 +907,8 @@ transformFromClauseItem(ParseState *pstate, Node *n,
|
||||
rte = rt_fetch(rtr->rtindex, pstate->p_rtable);
|
||||
/* We only support this on plain relations and matviews */
|
||||
if (rte->relkind != RELKIND_RELATION &&
|
||||
rte->relkind != RELKIND_MATVIEW)
|
||||
rte->relkind != RELKIND_MATVIEW &&
|
||||
rte->relkind != RELKIND_PARTITIONED_TABLE)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("TABLESAMPLE clause can only be applied to tables and materialized views"),
|
||||
|
@ -313,3 +313,21 @@ SELECT q.* FROM (SELECT * FROM test_tablesample) as q TABLESAMPLE BERNOULLI (5);
|
||||
ERROR: syntax error at or near "TABLESAMPLE"
|
||||
LINE 1: ...CT q.* FROM (SELECT * FROM test_tablesample) as q TABLESAMPL...
|
||||
^
|
||||
-- check partitioned tables support tablesample
|
||||
create table parted_sample (a int) partition by list (a);
|
||||
create table parted_sample_1 partition of parted_sample for values in (1);
|
||||
create table parted_sample_2 partition of parted_sample for values in (2);
|
||||
explain (costs off)
|
||||
select * from parted_sample tablesample bernoulli (100);
|
||||
QUERY PLAN
|
||||
-------------------------------------------
|
||||
Append
|
||||
-> Sample Scan on parted_sample
|
||||
Sampling: bernoulli ('100'::real)
|
||||
-> Sample Scan on parted_sample_1
|
||||
Sampling: bernoulli ('100'::real)
|
||||
-> Sample Scan on parted_sample_2
|
||||
Sampling: bernoulli ('100'::real)
|
||||
(7 rows)
|
||||
|
||||
drop table parted_sample, parted_sample_1, parted_sample_2;
|
||||
|
@ -100,3 +100,11 @@ WITH query_select AS (SELECT * FROM test_tablesample)
|
||||
SELECT * FROM query_select TABLESAMPLE BERNOULLI (5.5) REPEATABLE (1);
|
||||
|
||||
SELECT q.* FROM (SELECT * FROM test_tablesample) as q TABLESAMPLE BERNOULLI (5);
|
||||
|
||||
-- check partitioned tables support tablesample
|
||||
create table parted_sample (a int) partition by list (a);
|
||||
create table parted_sample_1 partition of parted_sample for values in (1);
|
||||
create table parted_sample_2 partition of parted_sample for values in (2);
|
||||
explain (costs off)
|
||||
select * from parted_sample tablesample bernoulli (100);
|
||||
drop table parted_sample, parted_sample_1, parted_sample_2;
|
||||
|
Loading…
x
Reference in New Issue
Block a user