使用execute + ActiveRecord插入二进制值

时间:2016-05-10 13:55:45

标签: ruby-on-rails ruby postgresql activerecord binary

我需要使用ActiveRecord执行PostgreSQL upsert查询:

sql = "INSERT INTO call_records (created_at, updated_at, number_tag, tag, raw_data)
  VALUES (current_timestamp, current_timestamp, 123, 'R', BINARY_VALUE)
  ON CONFLICT (number_tag) DO
  UPDATE SET tag = 'L' WHERE call_records.tag='L'"

raw_data在尝试通过运行以下命令存储二进制值时包含二进制值BINARY_VALUE

ActiveRecord::Base.connection.execute(%Q{#{sql}})

它返回以下错误:

ArgumentError: string contains null byte

二进制字符串如下所示:

"\x00\x00\x00\x95\x01\x00\x00\x02"

我该如何储存?我也尝试过:

value = "\x00\x00\x00\x95\x01\x00\x00\x02".unpack('H*')[0]
ActiveRecord::Base.connection.quote("\\x#{value}")

但它不起作用。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

找到问题的答案是

rails raw_bytea连接中的

active_record方法。