gpt4 book ai didi

ruby-on-rails - 使用 Ruby on Rails 在 postgres 中存储二进制对象

转载 作者:行者123 更新时间:2023-11-29 11:26:54 24 4
gpt4 key购买 nike

我需要在我们的 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(/\/, '\\\\' ) 似乎并没有解决它。

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

最佳答案

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

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

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

关于ruby-on-rails - 使用 Ruby on Rails 在 postgres 中存储二进制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com