我需要增加id
1000.我已经在表格中有记录。我创建迁移:如何更改表中的序列标识和关系?
def change
execute("ALTER SEQUENCE orders_id_seq START WITH 1000")
end
但在其他表是有关系order_id
。我还需要增加它们?
我该如何将它们增加到1000?
我需要增加id
1000.我已经在表格中有记录。我创建迁移:如何更改表中的序列标识和关系?
def change
execute("ALTER SEQUENCE orders_id_seq START WITH 1000")
end
但在其他表是有关系order_id
。我还需要增加它们?
我该如何将它们增加到1000?
你不会增加任何东西,只是你的命令开始序列的值。如果您希望该值成为nextval,则必须改用RESTART
(请参阅下面的示例)。另外 - 当您设置sequence的nextval时,您只更改id
的下一个DEFAULT值,而不是之前的id
值。为了提高id
列的所有值,你必须像update relation set id=id+1000;
运行平稳下面就是比如你的说法做了什么:
t=# \x
Expanded display is on.
t=# create table so14(i bigserial);
CREATE TABLE
t=# select * from so14_i_seq;
-[ RECORD 1 ]-+--------------------
sequence_name | so14_i_seq
last_value | 1
start_value | 1
increment_by | 1
max_value | 9223372036854775807
min_value | 1
cache_value | 1
log_cnt | 0
is_cycled | f
is_called | f
t=# ALTER SEQUENCE so14_i_seq START WITH 1000;
ALTER SEQUENCE
t=# select * from so14_i_seq;
-[ RECORD 1 ]-+--------------------
sequence_name | so14_i_seq
last_value | 1
start_value | 1000
increment_by | 1
max_value | 9223372036854775807
min_value | 1
cache_value | 1
log_cnt | 0
is_cycled | f
is_called | f
t=# insert into so14 values(DEFAULT);
INSERT 0 1
t=# insert into so14 values(DEFAULT);
INSERT 0 1
t=# select * from so14_i_seq;
-[ RECORD 1 ]-+--------------------
sequence_name | so14_i_seq
last_value | 2
start_value | 1000
increment_by | 1
max_value | 9223372036854775807
min_value | 1
cache_value | 1
log_cnt | 31
is_cycled | f
is_called | t
t=# select * from so14;
-[ RECORD 1 ]
i | 1
-[ RECORD 2 ]
i | 2
t=# ALTER SEQUENCE so14_i_seq RESTART WITH 1000;
ALTER SEQUENCE
t=# insert into so14 values(DEFAULT);
INSERT 0 1
t=# select * from so14;
-[ RECORD 1 ]
i | 1
-[ RECORD 2 ]
i | 2
-[ RECORD 3 ]
i | 1000
t=# select * from so14_i_seq ;
-[ RECORD 1 ]-+--------------------
sequence_name | so14_i_seq
last_value | 1000
start_value | 1000
increment_by | 1
max_value | 9223372036854775807
min_value | 1
cache_value | 1
log_cnt | 32
is_cycled | f
is_called | t
t=#
我已经有'orders'表中的记录,我不更改'id'。因此,对于已建立的关系,我不会更改'order_id'?我什么都不碰 – dmitriy
要同步,你必须增加关联表的order_id记录。
增加id不是一个好主意。但对于解决方案,您可以像下面这样做。
创建迁移和编写代码
def change
AssociatedModel.all.each do |associated_object|
associated_object.order_id = associated_object.order_id + 1000
associated_object.save(validate: false)
end
end
你已经有目前一些记录? –
如果订单关系的顺序发生了变化,它将仅从订单表中获得ID –
您不需要在每个关系 –