sql >> Base de Datos >  >> RDS >> PostgreSQL

SQLAlchemy declarativo:definición de disparadores e índices (Postgres 9)

Indices son sencillos de crear. Para una sola columna con index=True parámetro como a continuación:

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

Pero si quiere más control sobre el nombre y las opciones, use la construcción Index() explícita:

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

Activadores también se pueden crear, pero aún deben ser SQL -basado y enganchado al DDL eventos. Consulte Personalización de DDL para obtener más información, pero el código puede ser similar a este:

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'))

Nota al margen:no sé cómo configurar tsvector tipo de datos:merece una pregunta aparte.