2012-04-26 11 views
0

テーブルを分割したい。 表は以下のとおりです。ユニークなフィールドのないmysqlパーティション

create_table "multimedia", :force => true do |t|  
    t.integer "id" 
    t. binary "data"  
    t.integer "device_id"   
    t.datetime "created_at"     
end 

idは、主キー
のcreated_atは、テーブルのための単純な指標であり、私は、フィールドのcreated_atでテーブルを分割する必要が

ユニークな存在ではないです。私のテーブルには過去7日間の記録しかありませんので、私はその日までに分割したいと思います。私はこのCOSEを書く:

partition by range (to_days(created_at))   

    (PARTITION p20120417 VALUES LESS THAN (to_days('2012-04-17 23:59:59 +0200')),     
    PARTITION p20120418 VALUES LESS THAN (to_days('2012-04-18 23:59:59 +0200')),     
    PARTITION p20120419 VALUES LESS THAN (to_days('2012-04-19 23:59:59 +0200')),    
    PARTITION p20120420 VALUES LESS THAN (to_days('2012-04-20 23:59:59 +0200')),    
    PARTITION p20120421 VALUES LESS THAN (to_days('2012-04-21 23:59:59 +0200')),    
    PARTITION p20120422 VALUES LESS THAN (to_days('2012-04-22 23:59:59 +0200')),     
    PARTITION p20120423 VALUES LESS THAN (to_days('2012-04-23 23:59:59 +0200')),      
    PARTITION p20120424 VALUES LESS THAN (to_days('2012-04-24 23:59:59 +0200'))     
); 

コードは、私は、このエラーを与える:

A PRIMARY KEY must included all columns in the table's partitioning function

私はテーブルのみのcreated_atによるパーティションであり、それが一意でないことを必要とします。

どうすればいいですか?

+0

ようこそスタックオーバーフロー。 '{}'ツールバーボタンでソースコードブロックをフォーマットすることができます(またはすべての行に4文字の字下げを追加することもできます)。私は今度あなたのためにそれをしました。 –

答えて

0

主キー(id、created_at)を作成します。idは一意であるため、これは一意であることが保証されています。 create_atをテーブルパーティションの基準として使用できます。

関連する問題