2012-05-10 17 views
6
  • PostgreSQL 9.1
  • bảng được chia
    • tbl_master
    • tbl_slave1 (master iherits)
    • tbl_slave2 (master iherits)
  • Yii khung 1.1.10

Có thể một người nào đó có thể chê bai expierience của mình về bảng phân vùng Yii + PostgreSQL. PostgreSQL phần với các bảng phân vùng, kiểm tra và gây nên tác phẩm tuyệt vời, nhưng tôi không thể nhận Yii để tình yêu các bảng ..khuôn khổ Yii và PostgreSQL chia bảng - 0 rows affected

Vấn đề là trên chèn vào bảng phân vùng PostgreSQL cho 0 rows affected và tôi không thể tìm ra cách để giải quyết vấn đề này. Mô hình Yii cho rằng bản ghi mới không được lưu (nhưng đó là) và $Model->save(); trả về false và do đó afterSave() không hoạt động, v.v.

Tất cả các phương pháp khác là ->find() hoặc ->findAll() đang hoạt động tốt. Ngay cả khi tôi cập nhật ngay bây giờ lưu lại hồ sơ ném yii tất cả là ok và tôi nhận được thực hiện afterSave là tốt. Vấn đề chỉ với ->save() một phần. Cập nhật hoạt động vì tôi chỉ kích hoạt khi chèn các hàng mới.

Tôi đang sử dụng trình kích hoạt để chia dữ liệu mới theo bảng. Có lẽ tôi cần phải sửa đổi kích hoạt để postgres biết những gì tôi đang chuyển tiếp dữ liệu mới đến slave bảng không master?

Một điều nữa. Tôi đã thêm khóa chính vào master bảng để Mô hình Yii (CActiveRecord) không ném lỗi về bảng mà không có pk. Tôi biết tài liệu không đề nghị này, nhưng tôi đã nhận nó làm việc theo cách này. Chỉ cần cố gắng cung cấp cho hình ảnh lớn về tình huống của tôi.

Cảm ơn!

+1

Cách giải quyết không tốt lắm: Sử dụng 'RETURN NEW;' trong trình kích hoạt thay vì 'RETURN NULL;'. Và bây giờ tôi có hai hàng giống hệt nhau - một trong 'master' và thứ hai trong bảng' slave'. Vì vậy, tôi cần phải thêm trigger 'SAU CH INSN' để xóa bảng 'master' (' DELETE FROM ONLY master'). * Suy nghĩ thật to .. * - nhưng nó sẽ hoạt động. –

+0

** Xác nhận ** nhận xét trước đó - nó đang hoạt động. Để bây giờ nó là workaround tốt. –

Trả lời

1

Bạn có thể thử sử dụng các quy tắc thay thế. Khi nó viết lại truy vấn, tôi mong đợi nó trả lại số hàng bị ảnh hưởng chính xác. Mặc dù các trình kích hoạt trong hầu hết các trường hợp tốt hơn, tôi nghĩ rằng các quy tắc tốt hơn sau đó chèn dữ liệu vào bảng chính và phải xóa lại nó.

Điều này được đề cập trong đoạn 5.9.5 trên this manual page.