0

我希望能够使用通配符查询 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)
4

1 回答 1

1

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

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在这里看到匹配模式

于 2013-07-26T15:12:25.820 回答