【发布时间】:2014-12-24 11:57:51
【问题描述】:
由于 PostgreSQL 9.1 枚举值可以使用添加
ALTER TYPE my_type ADD VALUE new_value;
但是,尝试将其作为更大脚本的一部分运行会出现错误:
ALTER TYPE ... ADD 不能从函数或多命令字符串执行
这使得在生产中应用脚本更改变得非常麻烦,因为支持人员必须记住,虽然大多数脚本可以“正常”运行,但有一些“特殊”脚本需要在pgAdmin 并逐个手动运行。我已经用谷歌搜索了这个并且我理解限制 - 不能将枚举值添加到事务中或“多命令字符串”的一部分中。没关系。我不需要那样做。我只想添加多个枚举值并执行其他不相关的 SQL 语句,而不必一次向 Postgres 提供一条语句。
换句话说:我希望能够从 pgAdmin 和 psql 运行单个脚本,它与 pgAdmin 在我一次突出显示一行并按 F5(运行)时所做的事情相同。有没有办法做到这一点,也许用 plpgsql?
【问题讨论】:
-
为什么不使用检查约束而不是枚举。更加灵活(和便携)。
alter type add value不能在事务中运行,所以你需要做的就是在这些语句之前关闭自动提交(我不知道如何在 pgAdmin 中这样做,我不使用它) -
psql -f the_script可以正常工作。 -
你说得对,克雷格·林格,“psql -f”已经有效。 a_horse_with_no_name,是的,也许禁用自动提交可以解决问题,但我找不到这样做的方法(无需自己启动事务)。
SET AUTOCOMMIT = OFF给出错误:“不再支持 SET AUTOCOMMIT TO OFF” 那么“psql -f”是如何做到的呢?它会解析脚本本身并一次将一条语句发送到服务器吗? -
您找到解决方案了吗?当我想运行一个大脚本时,我也有这个问题
-
@Kostanos 不,但 PostgreSQL 12 应该允许这样做(未经测试,只需阅读文档)。
标签: postgresql enums