【问题标题】:Add multiple PostgreSQL enum values with one command使用一个命令添加多个 PostgreSQL 枚举值
【发布时间】: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


【解决方案1】:

看起来这个问题最终会在 PostgreSQL 12 中得到修复。

https://www.postgresql.org/docs/12/sql-altertype.html

如果在事务块内执行 ALTER TYPE ... ADD VALUE(向枚举类型添加新值的形式),则在提交事务之前不能使用新值。

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多