使用Postgres hstore的Rails 4,你可以使用通配符查询密钥吗?

时间:2013-07-26 03:57:17

标签: ruby-on-rails ruby postgresql

我希望能够使用通配符查询hstore中的键。

例如,我有一个首选项模型,其中包含名为“技能”的hstore列。

技能的一个例子可能是

{'Ruby' => {'checked' => true } }

现在我想像这样查询

Preference.where("skills LIKE :key", key: "%ruby%")

{"Angular.js"=>"{\"checked\"=>true}"}

SELECT user_id FROM preferences WHERE EXISTS( SELECT 1 FROM skeys(skills) AS k WHERE k LIKE '%angular%');                                                                                    
user_id                                                                                              
---------                                                                                             
(0 rows)

然而,

SELECT user_id FROM preferences WHERE EXISTS( SELECT 1 FROM skeys(skills) AS k WHERE k LIKE '%a%');                                                                                    
user_id                                                                                              
---------
        1                                                                                            
(1 row)

1 个答案:

答案 0 :(得分:1)

根据Craig在评论中所说的,这是可能的,但效率不高,这是一个示例查询:

SELECT * FROM some_hstore WHERE EXISTS( SELECT 1 FROM skeys(blah) AS k WHERE k ~* 'a%');

您可以在postgres http://www.postgresql.org/docs/current/static/functions-matching.html

中查看匹配的模式