python - 无法删除 Postgres ENUM

标签 python postgresql sqlalchemy

我在 postgres 中有一个枚举。它是通过 sql alchemy 定义的,如下所示:

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 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\')']

知道发生了什么事吗?任何想法如何解决这一问题?我希望能够可靠地添加和删除此类型(而不必删除整个数据库)。

最佳答案

看起来 SQLAlchemy 用引号将这种类型写入数据库(请参阅错误消息中的 SQL)。

尝试:

DROP TYPE "ProcessState";

关于python - 无法删除 Postgres ENUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46963046/

相关文章:

python - 操作系统错误: [Errno 26] Text file busy on vagrant with synced_folder

python - 如何在光学测距仪中测量图像重合度

postgresql - NpgsqlCommand.ExecuteNonQuery() 抛出后端发送无法识别的响应类型 : F when try to insert in a table

postgresql - 数据库类型的 Liquibase 变更集

python - 奇怪的 SQLAlchemy 错误消息 : TypeError: 'dict' object does not support indexing

python - Alembic — 在 `alembic_version` 表中存储额外信息

python - 使用 ctypes 在 Python 中读取 C 结构

python - 从 Django 中的列表创建标签云?

sql - Postgres 不同的查询计划产品/质量保证

python - 从 MySQL 数据库创建 Pyramid/SQLAlchemy 模型