我有这样的表结构:的Postgres 9.3指数涉及JSON列
CREATE TABLE user_items
(
user_id bigint references users(id) NOT NULL,
item_id bigint references items(id) NOT NULL,
col1 json DEFAULT '[{"text":""}]',
col2 json DEFAULT '[{"date":"","text":""}]',
col3 json DEFAULT '{"text":""}',
PRIMARY KEY (user_id, item_id)
)
我会运行的查询像这样:
SELECT * FROM user_items WHERE item_id = '?' AND col1 IS NOT NULL
我需要在这种情况下,指数(item_id, col1)
?
如果是这样,什么是正确的方法来做到这一点,因为当尝试它Postgres是抛出一个错误,因为col1
是JSON
类型。
感谢您的支持。 我认为数据类型相关的原因是因为我不能只在(item_id,col1)上做索引。这似乎是有道理的,因为'col1'是一个JSON类型。 – haknick
@haknick:数据类型*将*与JSON列上的索引相关。我通过将其作为部分索引的条件来避免这个问题。对任何类型的NULL进行测试。 –