Ruby on rails db:migrate创建序列,但不';我不能改变桌子吗?
我有一个迁移,它创建一个postres序列,用于自动递增主标识符,然后执行一条语句来更改列并指定默认值: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 我得到:
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