2012-10-04 52 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文件或图像之间没有真正的区别。所有可以同样有效地存储在数据库中。如果没有需要考虑的性能问题,我认为将数据存储在数据库中是绝对不容易的。 –

相关问题