Yii framework и многораздельная таблица PostgreSQL - затронуто 0 строк

  • PostgreSQL 9.1
  • Partitioned tables
    • tbl_master
    • tbl_slave1 (наследует хозяин)
    • tbl_slave2 (наследует хозяин)
  • Yii framework 1.1.10

Может быть, кто-то может поделиться своим опытом о секционированной таблице Yii + PostgreSQL. Часть PostgreSQL с секционированными таблицами, проверками и триггерами отлично работает, но я не могу заставить Yii полюбить эти таблицы ..

Проблема в том, что при вставке в многораздельную таблицу PostgreSQL дает 0 rows affected, и я не могу понять, как это исправить. Модель Yii считает, что новая запись не сохраняется (но это так), и $Model->save(); возвращает false, поэтому afterSave() не работает и так далее.

Все другие методы, такие как ->find() или ->findAll(), работают хорошо. Даже если я обновлю только что сохраненную запись, бросьте yii, все в порядке, и меня тоже выполнят afterSave. Проблема только в ->save() части. Обновление работает, потому что у меня есть триггер только при вставке новых строк.

Я использую триггер для разделения новых данных по таблицам. Может быть, мне нужно изменить триггер, чтобы postgres знал, что я пересылаю новые данные в slave таблицу, а не master?

Еще кое-что. Я добавил первичный ключ в таблицу master, чтобы модель Yii (CActiveRecord) не выдавала ошибок в таблице без pk. Я знаю, что документация этого не предполагает, но у меня это работает. Просто пытаюсь дать полную картину моей ситуации.

Спасибо!


person briiC    schedule 10.05.2012    source источник
comment
Не очень приятный обходной путь: используйте RETURN NEW; в триггере вместо RETURN NULL;. И теперь у меня есть две одинаковые строки - одна в master и вторая в slave таблице. Поэтому мне нужно добавить триггер AFTER INSERT для очистки таблицы master (DELETE FROM ONLY master). Мысли вслух ... - но это сработает.   -  person briiC    schedule 10.05.2012
comment
Подтверждаю предыдущий комментарий - работает. На данный момент это хорошее решение.   -  person briiC    schedule 11.05.2012


Ответы (1)


Вы можете попробовать использовать правила в качестве альтернативы. Когда он переписывает запрос, я ожидал, что он вернет правильное количество затронутых строк. Хотя в большинстве случаев триггеры лучше, я думаю, что правила лучше, чем вставка данных в главную таблицу и необходимость их повторного удаления.

Это описано в параграфе 5.9.5 на этой странице руководства.

person Eelke    schedule 28.10.2012