Enum type not created by create_all if only used in an ARRAY

Issue #3437 duplicate
Wichert Akkerman created an issue

I'm used to metadata.create_all() being very smart and creating everything as needed. I seem to have found a gap in its knowledge though: enum types that are only used in PostgreSQL ARRAY types are not created. The attached test case gives this output:

2015-05-29 14:40:08,477 INFO sqlalchemy.engine.base.Engine select version()
2015-05-29 14:40:08,477 INFO sqlalchemy.engine.base.Engine {}
2015-05-29 14:40:08,478 INFO sqlalchemy.engine.base.Engine select current_schema()
2015-05-29 14:40:08,478 INFO sqlalchemy.engine.base.Engine {}
2015-05-29 14:40:08,479 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2015-05-29 14:40:08,479 INFO sqlalchemy.engine.base.Engine {}
2015-05-29 14:40:08,479 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2015-05-29 14:40:08,479 INFO sqlalchemy.engine.base.Engine {}
2015-05-29 14:40:08,480 INFO sqlalchemy.engine.base.Engine show standard_conforming_strings
2015-05-29 14:40:08,480 INFO sqlalchemy.engine.base.Engine {}
2015-05-29 14:40:08,481 INFO sqlalchemy.engine.base.Engine select relname from pg_class c join pg_namespace n on n.oid=c.relnamespace where pg_catalog.pg_table_is_visible(c.oid) and relname=%(name)s
2015-05-29 14:40:08,481 INFO sqlalchemy.engine.base.Engine {'name': 'pizza'}
2015-05-29 14:40:08,482 INFO sqlalchemy.engine.base.Engine 
CREATE TABLE pizza (
    id SERIAL NOT NULL, 
    toppings topping[], 
    PRIMARY KEY (id)
)


2015-05-29 14:40:08,482 INFO sqlalchemy.engine.base.Engine {}
2015-05-29 14:40:08,483 INFO sqlalchemy.engine.base.Engine ROLLBACK
Traceback (most recent call last):
  File "/Users/wichert/Jzoo/backend/lib/python3.4/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
    context)
  File "/Users/wichert/Jzoo/backend/lib/python3.4/site-packages/sqlalchemy/engine/default.py", line 442, in do_execute
    cursor.execute(statement, parameters)
psycopg2.ProgrammingError: type "topping[]" does not exist
LINE 4:  toppings topping[], 

Comments (2)

  1. Mike Bayer repo owner

    see the workaround in #2729.

    ENUM has so many issues across SQLA / Alembic i am waiting for all the issues stop being reported and eventually I'll do a focused sweep of the whole thing.

  2. Log in to comment