我正在尝试调查数据库膨胀问题,而且我在表格中发现了一些我不了解但无法找到调查方法的内容。如果我错过了显而易见的事情,我很抱歉,我对数据库的知识和经验很少。
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
答案 0 :(得分:0)
如果仔细查看\ d + log的输出,您应该注意到子表消息被列为消息而不是partitions.messages。因此查询表partitions.messages是行不通的。
以下内容应该有效:
SELECT count(*) FROM messages;