2012-04-24 23 views
0

你好,我想添加分區到我的表。 從過去的7天 所以我想創建7分區,一個分區表多媒體contanins記錄 - 一個日子,所以嘗試執行此遷移:mysql分區的日子

def up 
execute "ALTER TABLE multimedia 
    partition by range (to_days(created_at)) 
    ( 
    PARTITION p0 VALUES LESS THAN (to_days(#{Time.now - (7 * 24 * 60 * 60)})), 
    PARTITION p1 VALUES LESS THAN (to_days(#{Time.now - (6 * 24 * 60 * 60)})), 
    PARTITION p2 VALUES LESS THAN (to_days(#{Time.now - (5 * 24 * 60 * 60)})), 
    PARTITION p3 VALUES LESS THAN (to_days(#{Time.now - (4 * 24 * 60 * 60)})), 
    PARTITION p4 VALUES LESS THAN (to_days(#{Time.now - (3 * 24 * 60 * 60)})), 
    PARTITION p5 VALUES LESS THAN (to_days(#{Time.now - (2 * 24 * 60 * 60)})), 
    PARTITION p6 VALUES LESS THAN (to_days(#{Time.now - (1 * 24 * 60 * 60)})), 
    PARTITION p7 VALUES LESS THAN (to_days(#{Time.now - (0 * 24 * 60 * 60)})), 
    PARTITION p8 VALUES LESS THAN MAXVALUE 
);" 
end 

遷移的結果是followe錯誤:

An error has occurred, all later migrations canceled: 

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds  to your MySQL server version for the right syntax to use near 
'11:09:43 +0200)), 
    PARTITION p1 VALUES LESS THAN (to_days(2012-04-18 11:0' at line 4: ALTER TABLE multimedia       
    partition by range (to_days(created_at)) 
    ( 

    == AddPartitionToMultimedia: migrating ======================================= 
-- 
    execute("ALTER TABLE multimedia \n  
partition by range (to_days(created_at))\n  
(\n   
PARTITION p0 VALUES LESS THAN (to_days(2012-04-17 11:09:43 +0200)),\n   
PARTITION p1 VALUES LESS THAN (to_days(2012-04-18 11:09:43 +0200)),\n   
PARTITION p2 VALUES LESS THAN (to_days(2012-04-19 11:09:43 +0200)),\n   
PARTITION p3 VALUES LESS THAN (to_days(2012-04-20 11:09:43 +0200)),\n   
PARTITION p4 VALUES LESS THAN (to_days(2012-04-21 11:09:43 +0200)),\n   
PARTITION p5 VALUES LESS THAN (to_days(2012-04-22 11:09:43 +0200)),\n   
PARTITION p6 VALUES LESS THAN (to_days(2012-04-23 11:09:43 +0200)),\n   
PARTITION p7 VALUES LESS THAN (to_days(2012-04-24 11:09:43 +0200)),\n   
PARTITION p8 VALUES LESS THAN MAXVALUE \n  
);") 
+0

請重新格式化,詳細說明! – lzap 2012-04-24 09:23:20

+0

錯誤是: 發生錯誤,所有後來的遷移取消: Mysql2 ::錯誤:您的SQL語法中有錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以獲取正確的語法以便在附近使用: – Dabidi 2012-04-24 09:31:03

+0

'11:09:43 +0200)),PARTITION p1 VALUE THAIL THAN(to_days(2012-04-18 11:0'at line 4 :ALTER TABLE multimedia 按範圍分區(to_days(created_at))(' – Dabidi 2012-04-24 09:31:24

回答

4

有錯誤在你to_days功能。您需要確保傳遞到to_days的值是字符串類型。類似下面的代碼:

to_days('2012-04-17 11:09:43 +0200') 
     ^      ^
     |       | 
+0

http://stackoverflow.com/questions/10296759/re-partitioning-by-day – Dabidi 2012-04-24 11:12:59