PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQLAlchemy declarativo:definindo gatilhos e índices (Postgres 9)


Índices são simples de criar. Para coluna única com index=True parâmetro como abaixo:
customer_code = Column(Unicode(15),unique=True,index=True)

Mas se você quiser mais controle sobre o nome e as opções, use a construção Index() explícita:
Index('customers_search_vector_indx', Customer.__table__.c.search_vector, postgresql_using='gin')

Acionadores podem ser criados também, mas eles ainda precisam ser SQL -baseado e ligado ao DDL eventos. Consulte Personalizando DDL para obter mais informações, mas o código pode ser semelhante 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'))

Sidenote:não sei como configurar tsvector tipo de dados:merece uma pergunta separada.