mini_sql icon indicating copy to clipboard operation
mini_sql copied to clipboard

Using binary data

Open bryanp opened this issue 2 years ago • 2 comments

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.

bryanp avatar Aug 02 '23 05:08 bryanp

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.

bryanp avatar Aug 02 '23 05:08 bryanp

its tricky, how would we easily know something is binary data? for starters though can you add a note to the readme?

SamSaffron avatar Aug 20 '24 23:08 SamSaffron