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

kam*_*pta 8 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))
Run Code Online (Sandbox Code Playgroud)

此链接建议将标记存储为具有GIN索引的文本数组.

如何将GIN索引添加到上表?我是否使用Stringvs Text数据类型也有所不同?

kam*_*pta 16

我解决了以下问题:

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"), )
Run Code Online (Sandbox Code Playgroud)

并简单地查询

db.session.query(Post).filter(Post.tags.contains([tag]))
Run Code Online (Sandbox Code Playgroud)

有数组类型来保持Text,而不是String另有一些错误发生