2017-10-26 4 views
2

나는 postgres에 enum을 가지고 있습니다.Postgres ENUM을 제거 할 수 없습니다

sa.Column('state', postgresql.ENUM(u'ACTIVE', u'STOPPED', u'FAILED', name='ProcessState'), nullable=True), 

내가 그것을 제거 할 수 있지만, 또한 존재할 것 같지 않습니다 : 그것은과 같이 SQL 연금술을 통해 정의 된

database=# select NULL :: ProcessState; 
ERROR: type "processstate" does not exist 
LINE 1: select NULL :: ProcessState 
        ^
database=# SELECT n.nspname AS "schema", t.typname 
    , string_agg(e.enumlabel, '|' ORDER BY e.enumsortorder) AS enum_labels 
FROM pg_catalog.pg_type t 
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace 
JOIN pg_catalog.pg_enum e ON t.oid = e.enumtypid 
GROUP BY 1,2; 
schema | typname |  enum_labels  
--------+-----------+----------------------- 
public | ProcessState | ACTIVE|STOPPED|FAILED 
(1 row) 


database=# drop type public.ProcessState; 
ERROR: type "public.processstate" does not exist 
database=# drop type ProcessState; 
ERROR: type "processstate" does not exist 

나는 손실에 있어요. 그것은 존재하고 동시에 존재하지 않는 것, 나는 그것을 제거하거나 다시 추가 할 수 없습니다. SQL Alchemy를 다시 추가하면 오류가 발생합니다.

File "python2.7/site-packages/sqlalchemy/engine/default.py", line 462, in do_execute 
    cursor.execute(statement, parameters) 
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) type "ProcessState" already exists 
[SQL: 'CREATE TYPE "ProcessState" AS ENUM (\'ACTIVE\', \'STOPPED\', \'FAILED\')'] 

어떤 아이디어가 진행되고 있습니까? 어떤 아이디어가 이것을 고치는 방법? 안정적으로이 유형을 추가하고 삭제할 수 있기를 원합니다 (전체 데이터베이스를 삭제하지 않고).

+0

혼합 된 경우 식별자가 인용이 필요합니다. –

+0

[PostgreSQL 열 이름은 대소 문자를 구별합니까?] 가능한 복제본 (https://stackoverflow.com/questions/20878932/are-postgresql-column-names-case-sensitive) –

답변

3

SQLAlchemy는이 유형을 따옴표가있는 데이터베이스에 기록하는 것처럼 보입니다 (오류 메시지의 SQL 참조).

시도 :

DROP TYPE "ProcessState";