PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Déclaratif SQLAlchemy :définition des déclencheurs et des index (Postgres 9)

Indices sont simples à créer. Pour une seule colonne avec index=True paramètre comme ci-dessous :

customer_code = Column(Unicode(15),unique=True,index=True)

Mais si vous voulez plus de contrôle sur le nom et les options, utilisez la construction Index() explicite :

Index('customers_search_vector_indx', Customer.__table__.c.search_vector, postgresql_using='gin')

Déclencheurs peuvent également être créés, mais ceux-ci doivent toujours être SQL -basé et accroché au DDL événements. Voir Personnalisation du DDL pour plus d'informations, mais le code pourrait ressembler à ceci :

from sqlalchemy import event, DDL
trig_ddl = DDL("""
    CREATE TRIGGER customers_search_vector_update BEFORE INSERT OR UPDATE
    ON customers
    FOR EACH ROW EXECUTE PROCEDURE
    tsvector_update_trigger(search_vector,'pg_catalog.english',customer_code,customer_name);
""")
tbl = Customer.__table__
event.listen(tbl, 'after_create', trig_ddl.execute_if(dialect='postgresql'))

Sidenote :Je ne sais pas comment configurer tsvector type de données :mérite une question distincte.