这是一个棘手的问题,希望有人可以通过使用SQLAlchemy发布/他们在PostgreSQL中的JSON(或JSONB)列的嵌套键上创建索引的方法来帮助我们所有人(i'我特意使用Flask-SQLAlchemy,但我认为这对答案来说并不重要。)
我已经尝试了以下索引创建的各种排列,并从关键错误中获取了所有内容,以及' c'这不是一个属性,操作员' getitem'此表达式不支持。
非常感谢任何帮助。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
foreach (var zone in TimeZoneInfo.GetSystemTimeZones())
{
cbTimeZones.Items.Add(zone.DisplayName);
}
}
private void cbTimeZones_SelectedIndexChanged(object sender, EventArgs e)
{
var zone = TimeZoneInfo.GetSystemTimeZones().Single(x => x.DisplayName == ((ComboBox)sender).SelectedItem.ToString());
lblTimeZone.Text = TimeZoneInfo.FindSystemTimeZoneById(zone.Id).StandardName;
}
}
答案 0 :(得分:1)
我找到的解决方案是使用text
创建功能索引。
此处有两个示例索引,具体取决于您是否要将结果转换为文本:
from sqlalchemy.sql.expression import text
from sqlalchemy.schema import Index
class TestThing(db.Model):
__tablename__ = 'test_thing'
id = db.Column(db.BigInteger(), primary_key=True)
data = db.Column(JSONB)
__table_args__ = (
Index("ix_6", text("(data->'level1'->'level2_A')")),
Index("ix_7", text("(data->'level1'->>'level2_A')")),
)
这将导致以下SQL创建索引:
CREATE INDEX ix_6 ON test_thing(((data -> 'level1'::text) -> 'level2_A'::text) jsonb_ops);
CREATE INDEX ix_7 ON test_thing(((data -> 'level1'::text) ->> 'level2_A'::text) text_ops);