2014-10-31 49 views
0

我試圖調查一個數據庫膨脹問題,我發現了一個表不完整的問題,我不明白,也找不到調查的方法。如果我錯過了顯而易見的信息,我很抱歉,我對數據庫的知識和經驗很少。什麼看起來像在postgresql表分區內的表?我如何調查?

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

表名是'public.messages'。只需使用'select count(*)from public.messages;'其他表('log_xxx')位於模式'partitions'中。 – 2014-10-31 19:17:48

回答

0

如果仔細觀察\ d + log的輸出,您應該注意到子表消息被列爲消息而不是partitions.messages。所以查詢表partitions.messages是行不通的。

下面應該工作:

SELECT count(*) FROM messages; 
+0

謝謝你注意到這一點。爲什麼它會出現在表格日誌的列表中?這是它自己的表與分區。我不願意統計整個表格,因爲一天有830萬條記錄。 – 2014-10-31 20:50:09

+0

@SeanSchluntz:「*爲什麼它會出現在列表中的日誌*」 - 因爲有人像這樣創建它:'create table messages(..)inherits(log);' – 2014-10-31 22:46:45

+0

感謝您的幫助。 – 2014-10-31 22:53:02

相關問題