使用一个命令添加多个PostgreSQL枚举值

使用一个命令添加多个PostgreSQL枚举值,postgresql,enums,Postgresql,Enums,因为PostgreSQL 9.1枚举值可以使用 ALTER TYPE my_type ADD VALUE new_value; 但是,尝试将其作为更大脚本的一部分运行会出现错误: 改变类型。。。无法从函数或多命令字符串执行ADD 这使得在生产中应用脚本更改变得非常麻烦,因为支持人员必须记住,虽然大多数脚本可以“正常”运行,但仍有一些“特殊”脚本需要在pgAdmin中打开并手动逐段运行。我已经在谷歌上搜索过了,我理解了它的局限性——枚举值不能添加到事务或“多命令字符串”的一部分中。没关系。我不需

因为PostgreSQL 9.1枚举值可以使用

ALTER TYPE my_type ADD VALUE new_value;
但是,尝试将其作为更大脚本的一部分运行会出现错误:

改变类型。。。无法从函数或多命令字符串执行ADD

这使得在生产中应用脚本更改变得非常麻烦,因为支持人员必须记住,虽然大多数脚本可以“正常”运行,但仍有一些“特殊”脚本需要在pgAdmin中打开并手动逐段运行。我已经在谷歌上搜索过了,我理解了它的局限性——枚举值不能添加到事务或“多命令字符串”的一部分中。没关系。我不需要那样做。我只想添加多个枚举值并执行其他不相关的SQL语句,而不必一次向Postgres提供一条语句


换句话说:我希望能够从pgAdmin和psql运行一个脚本,这与pgAdmin每次高亮显示一行并按F5(运行)时所做的相同。有没有办法做到这一点,也许可以使用plpgsql?

看来这最终会在PostgreSQL 12中得到修复

如果改变类型。。。ADD VALUE(向枚举类型添加新值的表单)在事务块内执行,在提交事务之前不能使用新值


为什么不使用检查约束而不是枚举呢。更加灵活(和便携)
alter type add value
无法在事务中运行,因此您需要做的就是在这些语句之前关闭自动提交(我不知道如何在pgAdmin中执行,我不使用它)
psql-f脚本
将正常工作。没错,Craig Ringer,“psql-f”已经工作了。一匹没有名字的马,是的,也许禁用自动提交就可以了,但我找不到一个方法(不亲自启动事务)
SET AUTOCOMMIT=OFF
给出了一个错误:“不再支持将AUTOCOMMIT设置为OFF”那么“psql-f”是如何实现的呢?它是否会解析脚本本身并将其一次发送给服务器一条语句?您是否找到了解决方案?当我想经营一家大公司时,我也有这个问题script@Kostanos不,但是PostgreSQL 12应该允许这样做(未经测试,只需阅读文档)。