我正在试图挽救一个坏掉的费力的安装。我已经使用mysqldump
转储了SQL表,但是现在我遇到了问题,新版本的giitorious在几个地方改变了它的SQL模式。
特别是,旧版本有一个表taggings
,看起来像
mysql> describe taggings;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| tag_id | int(11) | YES | MUL | NULL | |
| taggable_id | int(11) | YES | MUL | NULL | |
| taggable_type | varchar(255) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
在新版本中,这个表增加了三个列:
mysql> describe taggings;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| tag_id | int(11) | YES | MUL | NULL | |
| taggable_id | int(11) | YES | MUL | NULL | |
| taggable_type | varchar(255) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| tagger_id | int(11) | YES | | NULL | |
| tagger_type | varchar(255) | YES | | NULL | |
| context | varchar(255) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
,
grep 'INSERT INTO `taggings`' inuse.sql | mysql -uroot gitorious_production
与 失败
ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1
是否有一个简单的方法来告诉MySQL,最后两个字段应该留在他们的默认值,NULL
?
(新的Gitorious' taggings
表开始为空)
作为一般的最佳实践,您应该提到要插入的字段名:
Insert into taggings (id,tag_id,taggable_id,taggable_type,created_at) values (...your values...)
将新表标记重命名为tagings_old
用旧模式创建一个名为taggings的表
插入数据
将新列添加到表标记