postgresql - How do I get alembic to emit custom DDL on after_create? -


i've got couple of custom ddl statements want run after create table:

update_function = ddl("""                                                                                                                                                        create or replace function update_timestamp() returns trigger $$ begin     new.updated_at = now();     return new; end; $$ language 'pgplsql'; """)  update_trigger = ddl(""" create trigger update %(table)s_timestamp before update on %(table)s each row execute procedure update_timestamp(); """) 

and i've attached them this:

event.listen(session.__table__, 'after_create', update_function) event.listen(session.__table__, 'after_create', update_trigger) 

when create_all, sql expect:

create or replace function update_timestamp() returns trigger $$  begin     new.updated_at = now();     return new; end; $$ language 'pgplsql';   create trigger update session_timestamp before update on session each row execute procedure update_timestamp(); 

but when upgrade using alembic, statements don't appear:

-- running upgrade c0d470e5c81 -> 6692fad7378  create table session (     created_at timestamp without time zone default 'current_timestamp',      updated_at timestamp without time zone default 'current_timestamp',      id varchar(32) not null,      owner_id integer,      database_id varchar(32),      content text,      primary key (id),      foreign key(database_id) references database (id),      foreign key(owner_id) references users (id) );  insert alembic_version (version_num) values ('6692fad7378'); 

is there way alembic trigger 'after_create' events?

the table level before_create/after_create events emitted (just not metadata level ones). need make sure whatever happens in env.py script involves event listeners being set up.

the code have here looks little suspect:

event.listen(session.__table__, 'after_create', update_function) event.listen(session.__table__, 'after_create', update_trigger) 

session.__table__ here single table instance , that's not you'd see in alembic script. alembic create_table command creates table locally , runs create on it, you'd need listen table objects globally:

from sqlalchemy import table event.listen(table, 'after_create', update_function) event.listen(table, 'after_create', update_trigger) 

if these events 1 specific table though, wouldn't use events, you'd put ddl() triggers directly in migration script, right after calls create_table().


Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -