PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Dichiarativa SQLAlchemy:definizione di trigger e indici (Postgres 9)

Indici sono facili da creare. Per colonna singola con index=True parametro come di seguito:

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

Ma se vuoi un maggiore controllo sul nome e sulle opzioni, usa il costrutto esplicito Index():

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

Trigger possono anche essere creati, ma quelli devono essere ancora SQL -basato e agganciato al DDL eventi. Vedi Personalizzazione DDL per ulteriori informazioni, ma il codice potrebbe essere simile a questo:

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 a margine:non so come configurare tsvector tipo di dati:merita una domanda a parte.