【问题标题】:Storing binary objects in postgres using Ruby on Rails使用 Ruby on Rails 在 postgres 中存储二进制对象
【发布时间】:2011-12-17 05:51:32
【问题描述】:

我需要在我们的 postgres 数据库中存储类似 JSON 的对象。 最初我只是使用序列化字段,但它们是 占用太多空间。所以我写了一个简单的自定义压缩 方案,现在正在使用 Marshal.dump/load 来访问数据。 但是我遇到了 postgres 的 bytea 字段类型的障碍——它坚持 将每个不可见字节编码为 3 位八进制数,例如'\377'。

http://www.postgresql.org/docs/8.1/static/datatype-binary.html

我看不到实现这一目标的简单方法。 s.pack("m#{s.size}") 似乎生成带有单个 '\' 的字符串,而 postgres 想要 '\'。 最后添加一个 gsub( /\/, '\\\\' ) 似乎并不能解决它。

有没有人有更优雅(更有效)的解决方案?

【问题讨论】:

    标签: ruby-on-rails postgresql binary


    【解决方案1】:

    假设您正在使用原始 SQL 来操作这些 bytea 值,因为 ActiveRecord 会自行处理二进制列的编码和解码。永远不要尝试自己引用数据以在 SQL 中使用,始终使用驱动程序的引用和转义方法。在这种情况下,您应该使用escape_bytea

    encoded = ActiveRecord::Base.connection.escape_bytea(raw_bytes)
    

    同样,如果您得到数据库的转义 bytea 值输出,您将使用 unescape_bytea 解码 bytea

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多