【问题标题】:what data type to use for storing different files in database用于在数据库中存储不同文件的数据类型
【发布时间】:2012-09-25 20:28:06
【问题描述】:

我试图让数据库接受 postgres 数据库表中的不同文件。我要支持的文件具有不同的 mime 类型。我想支持pdf、word、纯文本和power point。问题是我不知道选择什么数据类型。 pgadmin(我正在使用的工具)的文档非常(比如说)不能令人满意。谢谢

【问题讨论】:

  • 对不起,删除了我的答案。一开始我以为你的意思是 MS SQL。 (阅读亚当,阅读!)
  • 您必须使用binary data type,但我敦促您重新考虑这样做。将文件存储在数据库中通常不是一个好主意。而是存储文件的路径。阅读:wiki.postgresql.org/wiki/BinaryFilesInDB
  • NullUserException 可能是对的,但我一直将二进制文件存储在数据库中,没有问题。如果您真的关心数据完整性,我认为将文件存储在数据库中是一个好主意。如果你只是存储文件的路径,没有什么可以阻止该文件被删除或重命名,那么你的数据就不再一致了。
  • 我还应该补充一点,我的发言经验有限,我的观点是少数。如果数据量足够大,在数据库中存储文件可能会成为问题。我只是想指出,对此有不止一种意见。
  • @JasonSwett:除了文件被删除之外,您还必须在数据库权限和文件系统权限之间保持某种一致性。

标签: sql database file postgresql sqldatatypes


【解决方案1】:

虽然您可以将文件 contents 存储在数据库中,但请考虑存储文件 path 并使用文件系统来存储文件。

在 IT 世界中,“你可以用任何东西做任何事”,但这并不意味着你应该

在这种情况下,您尝试将数据库用作文件系统,这是可以做到的,但数据库在存储文件内容(通常是“大”数据)方面不如文件系统高效或实用。它将:

  • 让您的备份更长、更大
  • 减慢插入查询速度(更多 I/O)
  • 使您的日志文件更大(更慢并更频繁地填充)
  • 使访问文件变慢(查询与简单磁盘 I/O)
  • 要求您通过数据库访问文件(麻烦、无法使用浏览器等)

【讨论】:

  • 好吧,是否有一个很好的信息来源可以阅读有关如何做到这一点的信息。我从来没有做过这样的事情。
  • 存储文件路径也有几个缺点:您必须复制访问权限,您不能以事务方式存储您的文件,您需要确保您的数据库没有引用不存在的文件,您需要确保您的文件系统不包含未引用的文件,您需要两个不同的备份,您无法通过 SQL 访问文件内容(很麻烦,因为您需要更改技术)。简而言之:没有明确的赢家。任何一种解决方案都可能是正确的 - 这完全取决于要求。
  • 我还想解释一下 Chris Date:首先根据逻辑考虑做出设计决策,然后再考虑实际考虑。字符串、数字、RTE 的内容、CSV 文件或图像之间没有真正的区别。所有这些都可以同样有效地存储在数据库中。如果不考虑性能问题,我认为将图像存储在数据库中绝对是轻而易举的事。
  • @JasonSwett 恕我直言,您必须没有没有大脑才能将图像存储在数据库中。围绕分散内容建立了一个完整的(良好的)行业和技术。将图像放入数据库与此正好相反。我不会梦想这样做,而且我看到它在尝试时失败了。就像我在回答中所说的那样,您可以对任何事情做任何事情,但这并不意味着您应该
  • @a_horse_with_no_name 最大的缺点可能是表中数据的大小,以及这对创建大量备份文件的影响。我做梦也想不到(更多信息请参阅我之前的评论)
【解决方案2】:

您可以在 PostgreSQL 中使用bytea 输入。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-03-25
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2013-01-31
  • 2023-03-05
  • 2016-03-17
相关资源
最近更新 更多