查询特定值的分区表名称

时间:2013-09-13 09:28:37

标签: greenplum

我已按timestamp with timezone列对表格进行了分区。然后我添加了一个分区,然后在该分区上添加了一个索引。现在,似乎Greenplum vacuum analyze TABLENAME之后使用该索引。否则它使用顺序扫描。

vacuum analyze TABLENAME的缺点是需要很长时间。它想要vacuum analyze PARTITIONTABLENAME,因为我知道上个月的每日分区不再发生变化。

问题是:如何获取current_timestamp等特定值的分区表名称?换句话说:我想访问Greenplum用来决定放置新条目的分区的函数。

1 个答案:

答案 0 :(得分:1)

Greenplum中的分区与其他表一样对待。如果您具有psql访问权限,则应该能够使用'\ d'命令查看search_path中您有权访问的所有表。较大的表格的每个分区都将显示在其中。除非您明确指定分区,否则greenplum将根据具有自动增量分区号的父表名称命名它们:

gpadmin=# create table testtab (testcol varchar(10),
gpadmin(#  test_time timestamptz)
gpadmin-# distributed by (testcol)
gpadmin-#  partition by range (test_time)
gpadmin-# ( START (date '2013-10-01') INCLUSIVE
gpadmin(#   END  (date '2013-11-25') EXCLUSIVE
gpadmin(# EVERY (INTERVAL '1 week'));
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_1" for table "testtab"
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_2" for table "testtab"
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_3" for table "testtab"
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_4" for table "testtab"
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_5" for table "testtab"
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_6" for table "testtab"
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_7" for table "testtab"
NOTICE:  CREATE TABLE will create partition "testtab_1_prt_8" for table "testtab"
CREATE TABLE
Time: 252.080 ms
gpadmin=#

要仅清空最近的分区,您可以创建一个返回具有最高分区号的表的函数:

gpadmin=# select tablename from pg_tables
gpadmin-# where tablename like 'testtab_1_prt_%' 
gpadmin-# order by tablename desc limit 1;
    tablename    
-----------------
 testtab_1_prt_8
(1 row)

Time: 89.151 ms

然后将其传递给真空分析。