1

我们不得不从 schema.rb 切换到 structure.sql,因为我们需要 MySQL 中的 VARBINARY 字段,上面有一个指定长度的索引,schema.rb 不处理,但是 structure.sql 可以。

不幸的是,我们现在遇到了一个更大的问题。structure.sql 文件包含CREATE TABLE按字母顺序排列的语句。我们的表有外键约束。structure.sql 文件包括这些关键约束,但引用的表直到文件更下方才创建。

例如

CREATE TABLE attachments (
  id INT NOT NULL auto_increment PRIMARY KEY,
  user_id INT,
  /* ... snip ... */
  CONSTRAINT attachments_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE
) ENGINE=InnoDB CHARSET=utf8;

/* ... snip ... */

CREATE TABLE users (
  id INT NOT NULL auto_increment PRIMARY KEY,
  /* ... snip ... */
) ENGINE=InnoDB CHARSET=utf8;

有解决方法吗?对于这样一个常见的数据库模式设计原则,它似乎从根本上被打破了,我什至无法相信这是一件事。我们在 Rails 3.2.12 上。

4

1 回答 1

0

据我所知,除了重写 SQL 文件以按正确顺序对创建表语句进行排序,或者在最后创建外键约束之外,没有任何解决办法。

考虑更改用于创建转储文件的任何工具。转储文件应该能够运行,而这个显然不...

于 2013-06-11T09:22:39.047 回答