[Sqlalchemy-tickets] Issue #3827: Inability to Create table with Mixin based Enum column on Postgre
Brought to you by:
zzzeek
From: Grzegorz Ś. <iss...@bi...> - 2016-10-16 21:29:15
|
New issue 3827: Inability to Create table with Mixin based Enum column on PostgreSQL https://bitbucket.org/zzzeek/sqlalchemy/issues/3827/inability-to-create-table-with-mixin-based Grzegorz Śliwiński: A long while ago, I've created a mixin for a user model containing only password related columns and functionality. https://github.com/fizyk/pyramid_fullauth/blob/master/pyramid_fullauth/models/mixins/password.py And till SQLAlchemy 1.0.15 it worked fine on PostgreSQL, unfotunately, since 1.1.0, SQLAlchemy no longer creates ENUM in PostgreSQL that are used only in Mixins. I've just checked and it workes perfectly fine with 1.0.15 and in 1.1.1 with Enum in the Model, but not when it's placed in Mixin that's used in model later on. Example build: https://travis-ci.org/fizyk/pyramid_fullauth/jobs/166536077 And engine with echo=True ``` tests/views/test_activation.py::test_account_activation[postgresql] 2016-10-16 23:27:10,846 INFO sqlalchemy.engine.base.Engine select version() 2016-10-16 23:27:10,846 INFO sqlalchemy.engine.base.Engine {} 2016-10-16 23:27:10,848 INFO sqlalchemy.engine.base.Engine select current_schema() 2016-10-16 23:27:10,848 INFO sqlalchemy.engine.base.Engine {} 2016-10-16 23:27:10,848 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2016-10-16 23:27:10,849 INFO sqlalchemy.engine.base.Engine {} 2016-10-16 23:27:10,849 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 2016-10-16 23:27:10,849 INFO sqlalchemy.engine.base.Engine {} 2016-10-16 23:27:10,850 INFO sqlalchemy.engine.base.Engine show standard_conforming_strings 2016-10-16 23:27:10,850 INFO sqlalchemy.engine.base.Engine {} 2016-10-16 23:27:10,851 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 2016-10-16 23:27:10,851 INFO sqlalchemy.engine.base.Engine {'name': u'user_authentication_provider'} 2016-10-16 23:27:10,852 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 2016-10-16 23:27:10,852 INFO sqlalchemy.engine.base.Engine {'name': u'users_groups'} 2016-10-16 23:27:10,852 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 2016-10-16 23:27:10,852 INFO sqlalchemy.engine.base.Engine {'name': u'users'} 2016-10-16 23:27:10,853 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 2016-10-16 23:27:10,853 INFO sqlalchemy.engine.base.Engine {'name': u'groups'} 2016-10-16 23:27:10,856 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 2016-10-16 23:27:10,856 INFO sqlalchemy.engine.base.Engine {'name': u'user_authentication_provider'} 2016-10-16 23:27:10,857 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 2016-10-16 23:27:10,857 INFO sqlalchemy.engine.base.Engine {'name': u'users_groups'} 2016-10-16 23:27:10,858 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 2016-10-16 23:27:10,858 INFO sqlalchemy.engine.base.Engine {'name': u'users'} 2016-10-16 23:27:10,859 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 2016-10-16 23:27:10,859 INFO sqlalchemy.engine.base.Engine {'name': u'groups'} 2016-10-16 23:27:10,860 INFO sqlalchemy.engine.base.Engine SELECT relname FROM pg_class c join pg_namespace n on n.oid=c.relnamespace where relkind='S' and n.nspname=current_schema() and relname=%(name)s 2016-10-16 23:27:10,860 INFO sqlalchemy.engine.base.Engine {'name': u'users_sq'} 2016-10-16 23:27:10,861 INFO sqlalchemy.engine.base.Engine CREATE SEQUENCE users_sq 2016-10-16 23:27:10,861 INFO sqlalchemy.engine.base.Engine {} 2016-10-16 23:27:10,862 INFO sqlalchemy.engine.base.Engine COMMIT 2016-10-16 23:27:10,864 INFO sqlalchemy.engine.base.Engine CREATE TABLE users ( password VARCHAR(40) NOT NULL, hash_algorithm hash_algorithms_enum NOT NULL, salt VARCHAR(50) NOT NULL, reset_key VARCHAR(255), email VARCHAR(254) NOT NULL, new_email VARCHAR(254), email_change_key VARCHAR(255), id INTEGER NOT NULL, username VARCHAR(32), firstname VARCHAR(100), lastname VARCHAR(100), activate_key VARCHAR(255), address_ip VARCHAR(15) NOT NULL, registered_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, logged_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, activated_at TIMESTAMP WITHOUT TIME ZONE, deactivated_at TIMESTAMP WITHOUT TIME ZONE, deleted_at TIMESTAMP WITHOUT TIME ZONE, is_admin BOOLEAN NOT NULL, PRIMARY KEY (id), UNIQUE (reset_key), UNIQUE (email), UNIQUE (new_email), UNIQUE (email_change_key), UNIQUE (username), UNIQUE (activate_key) ) 2016-10-16 23:27:10,864 INFO sqlalchemy.engine.base.Engine {} 2016-10-16 23:27:10,864 INFO sqlalchemy.engine.base.Engine ROLLBACK ``` |