0

テーブルを分割したい。テーブルは次のとおりです。

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 日間のレコードしかないので、日ごとに分割したいと思います。私はこのコーズを書きます:

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'))                
);  

コードは私にこのエラーを与えます:

PRIMARY KEY には、テーブルのパーティショニング関数のすべての列が含まれている必要があります

テーブルが created_at によってのみパーティション化される必要があり、一意にすることはできません。

どのようにできるのか?

4

1 に答える 1

0

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

于 2012-10-04T23:41:44.290 に答える