什么看起来像postgresql表分区中的表?我该如何调查?

时间:2014-10-31 18:59:29

标签: postgresql partitioning

我正在尝试调查数据库膨胀问题,而且我在表格中发现了一些我不了解但无法找到调查方法的内容。如果我错过了显而易见的事情,我很抱歉,我对数据库的知识和经验很少。

Postgresql 9.0

我有一个跟踪DHCP分配历史信息的数据库,它有四个表:日志,租约,池,消息。

每个表都按天划分为分区,因此我们可以在30天后删除分区。其中一些分区每天都会添加> 4M行。

查看大多数分区给出了我的期望:

dhcplog=> \d+ leases
                                                Table "public.leases"
   Column   |           Type           |                      Modifiers                      | Storage | Description 
------------+--------------------------+-----------------------------------------------------+---------+-------------
 id         | bigint                   | not null default nextval('leases_id_seq'::regclass) | plain   | 
 ip         | inet                     |                                                     | main    | 
 mac        | macaddr                  |                                                     | plain   | 
 start      | timestamp with time zone |                                                     | plain   | 
 stop       | timestamp with time zone |                                                     | plain   | 
 switchport | integer                  |                                                     | plain   | 
Foreign-key constraints:
    "leases_switchport_fkey" FOREIGN KEY (switchport) REFERENCES switchports(id)
Child tables: partitions.leases_2014_08_02,
              partitions.leases_2014_08_03,
              partitions.leases_2014_08_04,
              partitions.leases_2014_08_05,
              partitions.leases_2014_08_06, ...

但是在其中一个表中,我看起来像是对其他两个表的引用,作为分区列表(消息和日志)的一部分:

dhcplog=> \d+ log
                                               Table "public.log"
 Column  |           Type           |                    Modifiers                     | Storage  | Description 
---------+--------------------------+--------------------------------------------------+----------+-------------
 id      | bigint                   | not null default nextval('log_id_seq'::regclass) | plain    | 
 date    | timestamp with time zone |                                                  | plain    | 
 host    | character varying(30)    |                                                  | extended | 
 message | character varying(255)   |                                                  | extended | 
Child tables: messages,
              partitions.log_2014_10_01,
              partitions.log_2014_10_02, ...
              partitions.log_2014_11_07,
              pools

我无法获得行计数或来自这些分区的任何信息:

dhcplog=> SELECT count(*) FROM partitions.messages;
ERROR:  relation "partitions.messages" does not exist
LINE 1: SELECT count(*) FROM partitions.messages;
                             ^

但是这个计数适用于所有其他人。

有任何建议/建议吗?

感谢。 -sjs

1 个答案:

答案 0 :(得分:0)

如果仔细查看\ d + log的输出,您应该注意到子表消息被列为消息而不是partitions.messages。因此查询表partitions.messages是行不通的。

以下内容应该有效:

SELECT count(*) FROM messages;