Guy*_*rgo 5 postgresql binary ruby-on-rails
我需要在postgres DB中存储类似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(/\/,'\\\\')似乎无法解决它.
有没有人有更优雅(和工作)的解决方案?
mu *_*ort 10
据推测,您正在使用原始SQL来操作这些bytea值,因为ActiveRecord会自行处理二进制列的编码和解码.永远不要尝试引用数据以便在SQL中使用,始终使用驱动程序的引用和转义方法.在这种情况下,您应该使用escape_bytea:
encoded = ActiveRecord::Base.connection.escape_bytea(raw_bytes)
Run Code Online (Sandbox Code Playgroud)
同样,如果获得数据库的转义值输出,则unescape_bytea用于解码a .byteabytea
| 归档时间: |
|
| 查看次数: |
3580 次 |
| 最近记录: |