2012-10-04 55 views
2

我試圖讓一個數據庫接受postgres數據庫表中的不同文件。我想支持的文件是不同的MIME類型。我想支持pdf,單詞,純文本和功能點。問題是我不知道要選擇什麼數據類型。 pgadmin(我正在使用的工具)的文檔非常令人滿意(我們說)。謝謝用於在數據庫中存儲不同文件的數據類型

+0

對不起,刪除了我的答案。起初我以爲你的意思是MS SQL。 (READ ADAM,READ!) –

+2

您必須使用[二進制數據類型](http://www.postgresql.org/docs/8.1/static/datatype-binary.html),但我強烈建議您重新考慮這樣做。將文件存儲在數據庫中通常不是一個好主意。改爲存儲文件的路徑。閱讀本文:http://wiki.postgresql.org/wiki/BinaryFilesInDB – NullUserException

+1

NullUserException可能是正確的,但我將二進制文件存儲在數據庫中始終沒有問題。如果您真的關心數據完整性,我認爲將數據存儲在數據庫中是個好主意。如果您只是將路徑存儲到文件中,則沒有什麼可以防止該文件被刪除或重命名,然後您的數據不再一致。 –

回答

3

您可以在PostgreSQL中使用bytea類型。

+0

這樣的數據類型範圍的條目有多少個字節?有沒有辦法設置一個限制,因爲只有一個選擇。那是bytea,而不是bytea。如果你想設置一個限制,你會怎麼做? – patriques

+0

@patriques:bytea基本上是「變化的」,參見:http://www.postgresql.org/docs/current/static/datatype-binary.html而且限制是1GB(參見:http://wiki.postgresql.org /wiki/FAQ#What_is_the_maximum_size_for_a_row.2C_a_table.2C_and_a_database。3F) –

3

雖然你可以將文件存儲在數據庫中內容,考慮存儲文件路徑來代替,而使用文件系統來存儲文件。

在IT界「你可以用任何東西做任何事情」,但這並不意味着你應該應該

在這種情況下,您試圖將數據庫用作文件系統,但它可以做到,但數據庫不如存儲文件內容(通常是「大型」數據)的文件系統那樣高效或實用。它會:

  • 使您的備份時間更長,更大的
  • 減慢你的插入查詢下來(更多的I/O)
  • 讓你的日誌文件較大(慢,更經常補)
  • 使訪問文件慢(查詢VS簡單的磁盤I/O)
  • 要求您通過數據庫去訪問文件(麻煩,不能用瀏覽器等)
+0

以及有沒有一個很好的信息來源閱讀如何做到這一點。我從來沒有做過這樣的事情。 – patriques

+2

存儲文件路徑也有幾個缺點:您必須重複訪問權限,不能以交易方式存儲文件,您需要確保數據庫不會引用不存在的文件,您需要確保你的文件系統不包含未引用的文件,你需要兩個不同的備份,你不能通過SQL訪問文件內容(因爲你需要改變技術,所以很麻煩)。簡而言之:沒有明確的贏家。任何一種解決方案都可能是正確的 - 這完全取決於需求。 –

+0

我還想解釋Chris Date:首先基於*邏輯*考慮作出設計決定,其次考慮*實際*考慮。字符串,數字,RTE的內容,CSV文件或圖像之間沒有真正的區別。所有可以同樣有效地存儲在數據庫中。如果沒有需要考慮的性能問題,我認爲將數據存儲在數據庫中是絕對不容易的。 –

相關問題