ruby sequel gem - how to query arrays with the pg_array extension
Asked Answered
B

2

8

I am using the pg_array extension and sequel version 4.1.1.

I have added the extension like this:

Sequel::Database.extension :pg_array

I have created a column like this:

alter_table :emails do
  add_column :references, "text[]", null: true
end

I can load and retrieve arrays into a postgress array column, just like working with normal arrays.

What is not clear from the above link is how do I execute a query based on the values in this array column.

For example, if one row in the emails table contained these values in the references column:

                             references                             
--------------------------------------------------------------------
 {}
 {[email protected]}

How can I query the emails table to find a row that contains a references array value of the above value:

Email.where(references: ????)
Brakesman answered 2/5, 2014 at 19:40 Comment(3)
Please put the example here in the post, for which you want help ?Justinn
@ArupRakshit is that clearer?Brakesman
Usually you'll want to use operators like @> to determine membership, right?Bostick
O
9

Use the pg_array_ops extension:

Sequel.extension :pg_array_ops
Email.where(Sequel.pg_array_op(:references).contains('[email protected]'))
Overindulge answered 3/5, 2014 at 16:6 Comment(4)
Is this answer still up to date?Zoniazoning
@SeanDunford, for my sequel#5.25.0 & psql#11.5 it worksFinisterre
what is the correct way to make a schema migration for array fields with index?Finisterre
Working on Sequel 4, it requires .contains('{[email protected]}')Magulac
C
0

Have you tried?

ref = '5363f773bccf9'
emails = Email.arel_table
Email.where( emails[ :references ].matches( "%#{ref}%" ))
Cayser answered 3/5, 2014 at 9:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.