2013-07-30 70 views
9

原諒我的無知,但我想知道是否有辦法爲PostgreSQL中的表指定元數據,我不希望它作爲該表中的字段。例如,如果我想爲該表添加說明字段,創建時間等...是否可以在postgresql中添加表格元數據?

我知道我可以使用額外的表執行此操作,但我寧願不要這樣做,說實話。我在官方的PostgreSQL文檔中挖掘過,但除了查看information_schema.tables之外,沒有其他的東西,我在這裏猜測我不允許修改任何東西。

任何線索?否則,我想我將不得不創建更多的表來處理這個問題。

謝謝!

回答

13

有意見欄:

COMMENT ON TABLE my_table IS 'Yup, it's a table'; 

在當前版本的註釋字段僅限於一個單一的文本字符串。有關允許複合類型或記錄的討論,但AFAIK沒有就任何可行的設計達成一致。

如果需要,您可以將JSON插入註釋中。這有點骯髒,因爲它會顯示爲Description列中的\d+輸出在psql等,但它會工作。

craig=> COMMENT ON TABLE test IS 'Some table'; 
COMMENT 
craig=> \d+ 
         List of relations 
Schema |   Name   | Type | Owner | Size | Description 
--------+----------------------+----------+-------+------------+------------- 
public | test     | table | craig | 8192 bytes | Some table 

您可以從SQL獲得評論有:

SELECT pg_catalog.obj_description('test'::regclass, 'pg_class'); 

註釋也可以對其他對象添加,像列,數據類型,函數等

如果那並不是」 t滿足您的需求,您幾乎堅持使用元數據的邊桌。

人們經常要求創建時間等表格元數據,但沒有人會傾向於提出一個可行的實施計劃以及將時間和熱情貫徹到終點的熱情。在任何情況下,最常見的請求是「最後修改時間」,從性能的角度來看這是非常可怕的,並且在多版本併發控制,事務隔離規則等方面很難得到正確的結果。

+0

哇,感謝超詳細的迴應。我猜COMMENT可以用於描述目的。我想我也可以在那裏插入一個時間戳,然後將其用於「表創建時間」。我沒有得到最後修改的東西的全部想法...我認爲,每個表中有一個字段,其創建/修改的時間戳以及基於該字段的順序應該足夠了...... Altough不是很好有效,如果不是顯然需要...感謝克雷格!很好的答案! – AlejandroVK

+0

@AjjandroVK隨着「最後修改」的問題 - 通常人們想查看哪些表有最近的變化,而不必掃描表堆。我也不是很明白,但這似乎是一個普遍的要求。 –

+0

我想到的另一個用例是讓應用程序代碼將相關狀態存儲在表上。例如。我正在使用存儲事件的表格。應用程序按照他們的意願處理這個事件流,所以如果他們能夠直接在表上存儲他們上一次處理事件的id/timestamp,那將會很不錯。 – sthzg

相關問題