我有一个创建自动递增的主标识的postres序列,然后迁移执行语句改变列,并指定默认值:db:migrate创建序列但不更改表?
execute 'CREATE SEQUENCE "ServiceAvailability_ID_seq";'
execute <<-SQL
ALTER TABLE "ServiceAvailability"
ALTER COLUMN "ID" set DEFAULT NEXTVAL('ServiceAvailability_ID_seq');
SQL
如果我运行的db:迁移一切似乎工作在返回的没有错误,但是,如果我运行的Rails应用程序我得到:
Mnull value in column "ID" violates not-null constraint
我已经通过手动执行的迁移的SQL语句,这个错误是因为ALTER语句是没有发现工作,还是没有被执行。
如果我手动执行以下语句:
CREATE SEQUENCE "ServiceAvailability_ID_seq;
我得到:
error : ERROR: relation "serviceavailability_id_seq" already exists
这意味着移民成功创建序列!但是,如果我手动运行:
ALTER TABLE "ServiceProvider"
ALTER COLUMN "ID" set DEFAULT NEXTVAL('ServiceProvider_ID_seq');
SQL
它成功运行并创建默认的NEXTVAL。
所以问题是,为什么迁移文件使用第一个execute语句创建序列,但不能在第二个执行中更改表? (记住,没有错误上运行的数据库输出:迁移)
谢谢你,道歉TL:博士