Ruby on rails db:migrate创建序列,但不';我不能改变桌子吗?

Ruby on rails db:migrate创建序列,但不';我不能改变桌子吗?,ruby-on-rails,Ruby On Rails,我有一个迁移,它创建一个postres序列,用于自动递增主标识符,然后执行一条语句来更改列并指定默认值: execute 'CREATE SEQUENCE "ServiceAvailability_ID_seq";' execute <<-SQL ALTER TABLE "ServiceAvailability" ALTER COLUMN "ID" set DEFAULT NEXTVAL('ServiceAvailability_ID_seq'); SQL 我得到:

我有一个迁移,它创建一个postres序列,用于自动递增主标识符,然后执行一条语句来更改列并指定默认值:

execute 'CREATE SEQUENCE "ServiceAvailability_ID_seq";'
execute <<-SQL
  ALTER TABLE "ServiceAvailability" 
    ALTER COLUMN "ID" set DEFAULT NEXTVAL('ServiceAvailability_ID_seq');
SQL
我得到:

错误:错误:关系“serviceavailability\u id\u seq”已存在

这意味着迁移成功地创建了序列!但是,如果我手动运行:

ALTER TABLE "ServiceProvider" 
    ALTER COLUMN "ID" set DEFAULT NEXTVAL('ServiceProvider_ID_seq');
SQL
它成功运行并创建默认的NEXTVAL

所以问题是,为什么迁移文件使用第一个execute语句创建序列,而不在第二个execute语句中更改表?(记住,运行db:migrate时不会输出错误)


感谢您并为tl:dr表示歉意

我将序列的创建和表的更改分为两次迁移

运行时:

rake db:migrate
序列将不会被创建,表也不会被更改,rake将成功运行

但是,如果我单独运行迁移:

rake db:migrate VERSION=1
rake db:migrate VERSION=2
将创建序列,并按预期更改表

rake db:migrate VERSION=1
rake db:migrate VERSION=2