PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQLAlchemy declarative:Definieren von Triggern und Indizes (Postgres 9)

Indizes sind einfach zu erstellen. Für einspaltig mit index=True Parameter wie unten:

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

Wenn Sie jedoch mehr Kontrolle über den Namen und die Optionen haben möchten, verwenden Sie das explizite Index()-Konstrukt:

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

Auslöser können ebenfalls erstellt werden, aber diese müssen immer noch SQL sein -basiert und mit der DDL verbunden Veranstaltungen. Weitere Informationen finden Sie unter Anpassen von DDL, aber der Code könnte etwa so aussehen:

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

Nebenbemerkung:Ich weiß nicht, wie man tsvector konfiguriert Datentyp:verdient eine separate Frage.