Почему MetaData.create_all () не создает тип ENUM в правильном расположении пространства имен, но схему необходимо явно передать типу перечисления sqlalchemy.Enum
?
import enum
import sqlalchemy
engine = sqlalchemy.create_engine('postgresql://postgres@localhost/postgres')
connection = engine.connect()
connection.execute("CREATE SCHEMA IF NOT EXISTS myschema")
meta = sqlalchemy.MetaData(schema = 'myschema')
sqlalchemy.Enum(
enum.Enum('e', ('these', 'are', 'enum', 'values', 'of', 'myschema')),
# schema = 'myschema', # why its not taking via MetaData
metadata = meta,
)
meta.create_all(bind=engine, checkfirst=True)
connection.close()
создан в publi c пространстве имен.
postgres=# \dT+
List of data types
Schema │ Name │ Internal name │ Size │ Elements │ Owner │ Access privileges │ Description
────────┼──────┼───────────────┼──────┼──────────┼──────────┼───────────────────┼─────────────
public │ e │ e │ 4 │ these ↵│ postgres │ │
│ │ │ │ are ↵│ │ │
│ │ │ │ enum ↵│ │ │
│ │ │ │ values ↵│ │ │
│ │ │ │ of ↵│ │ │
│ │ │ │ myschema │ │ │
(1 row)
postgres=# set search_path to myschema;
SET
Time: 0.359 ms
postgres=# \dT+
List of data types
Schema │ Name │ Internal name │ Size │ Elements │ Owner │ Access privileges │ Description
────────┼──────┼───────────────┼──────┼──────────┼───────┼───────────────────┼─────────────
(0 rows)