如何在SQLAlchemy中的文本数组列上创建GIN索引(使用PostgreSQL和python)

如何在SQLAlchemy中的文本数组列上创建GIN索引(使用PostgreSQL和python),python,postgresql,indexing,sqlalchemy,flask-sqlalchemy,Python,Postgresql,Indexing,Sqlalchemy,Flask Sqlalchemy,我想在postgre表上执行大量查询以按标记过滤 from sqlalchemy.dialects.postgresql import ARRAY class Post(db.Model): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True) tags = db.Column(ARRAY(db.String)) 建议将标记存储为带有GIN索引的文本数组 如何将GIN索引添加到上表中?

我想在postgre表上执行大量查询以按标记过滤

from sqlalchemy.dialects.postgresql import ARRAY

class Post(db.Model):
    __tablename__ = 'post'

    id = db.Column(db.Integer, primary_key=True)
    tags = db.Column(ARRAY(db.String))
建议将标记存储为带有GIN索引的文本数组


如何将GIN索引添加到上表中?是否使用
String
Text
数据类型也有区别吗?

我通过以下方法解决了这个问题:

from sqlalchemy.dialects.postgresql import ARRAY, array

class Post(db.Model):
    __tablename__ = 'post'

    id = db.Column(db.Integer, primary_key=True)
    tags = db.Column(ARRAY(db.Text), nullable=False, default=db.cast(array([], type_=db.Text), ARRAY(db.Text)))
    __table_args__ = (db.Index('ix_post_tags', tags, postgresql_using="gin"), )
并简单地通过

db.session.query(Post).filter(Post.tags.contains([tag]))
必须将数组类型保持为
Text
而不是
String
,否则会发生错误