2

I need to search for id field from an array. I'm using the PG gem, so I'm thinking I should be using TextEncoder::Array.new.encode(myarray) to shove in the qualified list. The PostgreSQL structure is as follows:

SELECT id FROM tablename WHERE fieldname IN ('alpha', 'bravo', 'charlie')

So my starting array in Ruby would be ['alpha', 'charlie', 'bravo'], so this is my current syntax:

a = ['alpha', 'bravo', 'ccharlie']
b = $conn.exec_params( %Q{ SELECT id FROM tablename WHERE fieldname IN ( $1 ) }, [ PG::TextEncoder::Array.new.encode(a) ] )
puts b.inspect

exec_params obviously takes an array, even it's a single array element. But using PG::TextEncoder::Array.new.encode(a) results in the following structure:

"{alpha,bravo,charlie}"

...which is an object (.class). The improper result I'm getting is that there are no records found, which is false.

How can I place a Ruby array inside as the first PG parameter?

UPDATE:

I've been using:

...AND NOT (mytable.field = ANY ($6))

where $6 is this:

PG::TextEncoder::Array.new(elements_type: PG::TextEncoder::String.new)

in a PG::TypeMapByColumn.new instance. The Ruby array that's going in there, is valid, holds a value. It is, in this example, a one-element string in an array, to be used in my SQL statement. All is good, but it isn't working. It would help if I actually saw the SQL statement sent to the db. Too much is hidden here.

1 Answer 1

1

I found the answer: ...AND NOT hashtag = ANY ($1)... where $1 is a proper Ruby array. It's not actually supported by the PG gem people.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for answering your own question. Using ANY ($1) with a PG array type PG::TextEncoder::Array.new(elements_type: PG::TextEncoder::String.new) is definitely the best answer here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.