Yii框架和PostgreSQL分区表 - 影响0行

6
  • PostgreSQL 9.1
  • 分区表
    • tbl_master
    • tbl_slave1(继承自主表)
    • tbl_slave2(继承自主表)
  • Yii框架1.1.10

也许有人可以分享一下关于Yii + PostgreSQL分区表的经验。 使用分区表的PostgreSQL,检查和触发器都很好用,但我无法让Yii喜欢这些表。

问题在于,当插入分区表时,PostgreSQL会给出“0行受影响”的提示,而我无法找到解决方法。 Yii模型认为新记录没有保存(但实际上已经保存了),$Model->save();返回false,因此afterSave()也不起作用等等。

所有其他方法如->find()->findAll()都能正常工作。即使我只是通过Yii更新刚刚保存的记录,一切都还好,我也能执行afterSave。问题只出现在->save()部分。 更新可以正常工作,因为我只在插入新行时触发触发器

我正在使用触发器将新数据拆分为多个表。也许我需要修改触发器,以便PostgreSQL知道我正在将新数据转发到slave表而不是master表?

还有一件事。我在master表中添加了主键,以便Yii模型(CActiveRecord)不会因为没有主键的表而抛出错误。我知道文档没有建议这样做,但我用这种方法使它工作了。只是想给出我情况的大致描述

谢谢!


1
不太美观的解决方法:在触发器中使用 RETURN NEW; 而不是 RETURN NULL;。现在我有两行完全相同的数据 - 一行在 master 表中,另一行在 slave 表中。因此,我需要添加一个触发器 AFTER INSERT 来清除 master 表 (DELETE FROM ONLY master)。自言自语.. - 但这会起作用。 - briiC
确认之前的评论 - 它正在工作。目前它是一个很好的解决方法。 - briiC
1个回答

2
你可以尝试使用规则作为替代方案。由于它重写查询,我期望它能返回正确数量的受影响行数。虽然触发器在大多数情况下更好,但我认为规则比将数据插入主表并再次删除数据更好。
这在第5.9.5段中有详细说明,可参考本手册页面

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接