我需要增加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 –
您不需要在每個關係 –