У меня есть ситуация, когда в предыдущем выпуске у меня было 0 сеяных значений в table1
с использованием сценария liquibase. Моим первичным ключом была последовательность в java, и значения начинались с 100000
.
Это продолжалось в течение нескольких выпусков.
Теперь, в последующем выпуске, внезапно возникнет необходимость занести некоторые (например, 10) значения в таблицу table1
. В качестве процесса переноса даты могут быть некоторые (с помощью приложения) вставленные вручную значения в таблицу table1
. Чтобы первичные ключи не конфликтовали с уже существующими ключами, я планирую начинать идентификаторы с 1 до 10, поскольку последовательность начинается с 10000 и никогда не будет иметь значения меньше 100000.
У меня есть возможность написание альтернативного сценария с использованием двух подходов:
Код подхода 1 выглядит следующим образом:
- changeSet:
id: ID-1
author: demo
preConditions:
onFail: MARK_RAN
sqlCheck:
expectedResult: 0
sql: select count(*) from ${schema}.table1 where column_1 >= 1 and column_1 <= 10;
changes:
- sql:
dbms: PostgreSQL
splitStatements: true
stripComments: true
sql: INSERT INTO ${schema}.table1 (column_1, column_2) VALUES(1, 'text1');
INSERT INTO ${schema}.table1 (column_1, column_2) VALUES(2, 'text2');
.....
INSERT INTO ${schema}.table1 (column_1, column_2) VALUES(10, 'text10');
Код подхода 2 выглядит следующим образом:
- changeSet:
id: ID-1
author: demo
preConditions:
onFail: MARK_RAN
sqlCheck:
expectedResult: 0
sql: select count(*) from ${schema}.table1 where column_1 = 1
changes:
- sql:
dbms: PostgreSQL
splitStatements: true
stripComments: true
sql: INSERT INTO ${schema}.table1 (column_1, column_2) VALUES(1, 'text1');
- changeSet:
id: ID-2
author: demo
preConditions:
onFail: MARK_RAN
sqlCheck:
expectedResult: 0
sql: select count(*) from ${schema}.table1 where column_1 = 2
changes:
- sql:
dbms: PostgreSQL
splitStatements: true
stripComments: true
sql: INSERT INTO ${schema}.table1 (column_1, column_2) VALUES(2, 'text2');
----
- changeSet:
id: ID-10
author: demo
preConditions:
onFail: MARK_RAN
sqlCheck:
expectedResult: 0
sql: select count(*) from ${schema}.table1 where column_1 = 10
changes:
- sql:
dbms: PostgreSQL
splitStatements: true
stripComments: true
sql: INSERT INTO ${schema}.table1 (column_1, column_2) VALUES(10, 'text10');
Я из Мы решили использовать подход № 1, так как есть меньшие проверки, но сначала хотели подтвердить, так как изменение кода напрямую go попадет в среду клиента, а будущие изменения вышеупомянутой логики c приведут к ошибкам контрольной суммы.