我在PostgreSQL中有一个标准的NoSQL表:ID(UUID
)和Data(jsonb
)。我想在进入“数据”列的JSON文档的属性之一上创建索引。通常我像这样使用EF Core:
modelBuilder.Entity<T>().HasIndex(e => e.ColumnToPutAnIndexOn);
我的假设是在JSON属性上创建索引是这样的:
modelBuilder.Entity<T>().HasIndex(e => e.Data.PropertyToPutAnIndexOn);
但是,这给了我一个错误:
The expression should represent a simple property access: 't => t.MyProperty'.
Npgsql documentation仍在处理此事。
没有人知道如何在不编写原始SQL语句的情况下最好地在JSON文档上创建索引吗?
谢谢。
不幸的是,对jsonb文档中的属性进行索引并不像对表列进行索引一样简单...请看the PostgreSQL docs for this to get an idea。
总结重要信息,如果您只想查询顶级JSON属性,则该列上的GIN索引就足够了。如果您想更深入地查询文档,则必须设置一个表达式索引,这完全是另一种野兽。
由于复杂性和不同的选择,提供的内容并不会自动为您做任何事情-您必须在迁移中使用原始SQL来定义所需的索引(这样做没有问题-鼓励这样做) 。如果我们可以为不同的jsonb场景提供合理的索引创建逻辑,则将来可能会改变。