id
を1000ずつ増やす必要があります。すでにテーブルにレコードがあります。 テーブルのシーケンスIDとリレーションシップを変更する方法は?
def change
execute("ALTER SEQUENCE orders_id_seq START WITH 1000")
end
しかし、他のテーブルで
関係order_id
があります:私は、移行を作成します。私もそれらを増やす必要がありますか?
どうすれば1000に増やすことができますか?
id
を1000ずつ増やす必要があります。すでにテーブルにレコードがあります。 テーブルのシーケンスIDとリレーションシップを変更する方法は?
def change
execute("ALTER SEQUENCE orders_id_seq START WITH 1000")
end
しかし、他のテーブルで
関係order_id
があります:私は、移行を作成します。私もそれらを増やす必要がありますか?
どうすれば1000に増やすことができますか?
あなたのコマンドで始まるシーケンスの値以外の値は増やさないでください。その値をnextvalにしたい場合は、代わりにRESTART
を使用する必要があります(下記の例を参照)。また、シーケンスの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
を書くあなたは既に存在しているいくつかのレコードを持っていますか? –
リレーションシップの順序が変更された場合、それはordersテーブルからidを取るだけです –
すべてのリレーションでorder_idを変更する必要はありません –