2017-10-26 19 views
2

私はポストグルにenumを持っています。私はそれを削除することはできませんが、それも存在するように見えるdoes notのPostgres ENUMを取り除くことができません

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

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の錬金術を経由して定義されました。それは存在しているようであり、同時に存在しないと私はそれを削除するか、またはそれを再追加することはできません。 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"; 
関連する問題