我希望能够使用通配符查询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)
答案 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
中查看匹配的模式