我试图在PostgreSQL中向现有类型添加新的类型值。但是我收到以下错误
错误:ALTER TYPE... ADD不能在事务块内运行
我用来向类型添加新值的查询是
ALTER TYPE public.request_type ADD VALUE "Check";
我实际上是在使用node-pg-migrate创建的迁移文件中运行上述查询
这里public
是我的模式。
知道为什么会失败吗?
编辑:
当在pgadmin中执行以下查询时,它执行得很好
ALTER TYPE public.request_type ADD VALUE "Check";
但是,当我通过node-pg-migrate迁移运行上述命令时,它失败并抛出上述错误
6条答案
按热度按时间vm0i2vca1#
如前所述,您不能在事务块中编辑枚举,但可以创建新的枚举,步骤如下:
1.对于使用此类型的所有列/表,将类型从request_type更改为varchar:
1.删除并重新创建request_type枚举:
1.将所有列/表的类型从varchar恢复为request_type(恢复步骤1):
mo49yndu2#
原因在
src/backend/commands/typecmds.c
中的AlterEnum
中的以下注解中给出:请注意,此限制在commit 212fab99中已被删除;提交消息为:
因此,您可能希望尽快升级到PostgreSQL v12:^)
xqkwcwgp3#
PostgreSQL shown here早期版本的解决方法:
请注意,这将需要特殊权限,因为它会更改系统表。
'NEW_ENUM_VALUE'
替换为所需的值。'type_egais_units'
替换为要更改的枚举的oid
。(使用SELECT * FROM pg_enum
查找要更新的枚举,在我的示例中,它是一个5位数,如'19969'
)声明:
当然,按照公认答案中的建议升级PostgreSQL可能是最好的。
有人知道如何在从pgAdmin Version 3.5运行查询时避免使用事务吗?(即,使用F5执行时)
tpgth1q74#
您可以将查询更改为
7ajki6be5#
具体地说,如何使用
node-pg-migrate
来实现这一点是禁用迁移的事务:wn9m85ua6#
如果更改xml格式日志,请使用
<changeSet id="name" author="author" runInTransaction="false">