mysql按天分区

标签 mysql ruby-on-rails migration partitioning

您好,我想为我的表添加分区。 表格多媒体包含最近 7 天的记录 所以我想创建 7 个分区,一个分区 - 一天 所以尝试执行此迁移:

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

迁移的结果是以下错误:

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

最佳答案

to_days 函数有错误。您需要确保传递给 to_days 的值是字符串类型。类似于下面的代码:

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

关于mysql按天分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10295101/

相关文章:

mysql - 将 mysql 查询转换为 postgres 时出错

mysql - 如何在 SELECT QUERY 上插入条件语句或 IF ELSE FUNCTION

ruby-on-rails - 如何获取不包括继承、嵌入、由 rails、getter、setter、验证器 a 和其他生成的模型方法?

mysql - 从 rails 迁移创建 mysql 函数

mysql - 使用 DataMapper 和 MySQL 数据库设置 Padrino

php 编辑带有上传图像的条目

javascript - Rails中ajax调用后调用js文件

ruby-on-rails - 电子商务运输和帐单地址到 rails 中的一张表中

MySql 5.6 到 MSSql 服务器 2014 迁移 : ExecuteReader requires an open and available Connection

node.js - Sequelize 唯一约束错误: Validation error