【问题标题】:ERROR: cannot ALTER TABLE because it has pending trigger events while attempting to drop a column in a table错误:无法 ALTER TABLE,因为它在尝试删除表中的列时有挂起的触发器事件
【发布时间】:2015-07-03 11:33:14
【问题描述】:

我在我的 liquibase 变更集中写了一个 sql 标签。此 sql 代码假设在名为“Purchase”的表中进行数据迁移。所以我有以下 sql 查询:

UPDATE purchase
SET location_id = (SELECT location_id FROM shop WHERE shop.id = purchase.shop_id);

那么,

ALTER TABLE purchase DROP COLUMN shop_id;

但我在尝试执行第二个查询时遇到以下错误,该查询应该删除表 Purchase 中的列“shop_id”

ERROR: cannot ALTER TABLE  because it has pending trigger events

请问这个错误是什么时候抛出的,我该如何解决。

在我的 liquibase changee 中,我的 sql 标签写如下

<sql>
     UPDATE purchase
     SET location_id = (SELECT location_id FROM shop WHERE shop.id = purchase.shop_id);        

     ALTER TABLE purchase DROP COLUMN shop_id;
</sql

请问有人可以帮我吗?提前感谢您的帮助

【问题讨论】:

  • 你在改变之前尝试过提交吗?
  • @Joe Love 请问要提交的 sql 代码是什么?
  • 在直接 SQL 中,它只是“提交”(没有引号)。你的库也可能有一个提交命令,但是直接的 SQL 应该可以工作——唯一的问题是是否使用“开始事务”开始一个新事务——我会先尝试而不这样做,但是那么你将不得不研究你的应用程序,看看你是否需要另一个事务——没有它可能会工作得很好,但如果出现故障,我不希望你得到中途提交的东西。
  • 好的,我只使用“commit”(没有引号),它可以工作。感谢@Joe Love 的帮助
  • 我将作为一个snwer提交。

标签: sql postgresql liquibase


【解决方案1】:

听起来您需要在 alter 和 update 之间提交更改。

试试这个:

UPDATE purchase
SET location_id = (SELECT location_id FROM shop WHERE shop.id = purchase.shop_id);
COMMIT;
BEGIN;
ALTER TABLE purchase DROP COLUMN shop_id;

“开始;”是可选的,但听起来您的框架正在使用事务,所以我会包含它并测试以确保更改实际上“接受”。

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    相关资源
    最近更新 更多