mini_sql
mini_sql copied to clipboard
Using binary data
I'm using mini_sql to query a bytea column in postgres, but I'm having trouble getting the query to run. Here's the error:
PG::CharacterNotInRepertoire:
ERROR: invalid byte sequence for encoding "UTF8": 0xe1 0x46 0xe0
Using pg directly, I can do something like this:
sql = <<~SQL
select from secrets where key = $1
SQL
db.exec_params(sql, [
{value: SecureRandom.bytes(32), format: 1},
])
However I'm not too sure the best way to go about solving this using mini_sql. Note that I can get the same PG::CharacterNotInRepertoire error using pg directly with the following approach:
sql = <<~SQL
select from secrets where key = '#{SecureRandom.bytes(32)}'
SQL
db.exec(sql)
Curious if there's a way around this issue or if additional support is needed.
FWIW I did find a workaround:
where("key = :key", key: PG::TextEncoder::Bytea.new.encode(SecureRandom.bytes(32)))
Curious if you think this should have better built-in support. If so, I'd be happy to brainstorm potential solutions.
its tricky, how would we easily know something is binary data? for starters though can you add a note to the readme?