WebHU - Programozási kérdések és válaszok

Flyway script második flyway szkript az első kihagyás után

Úgy tűnik, hogy a Flyway kihagyja a V1__Create_COST_DATA.sql szkriptemet, de megpróbálja futtatni a V1.2__ALTER_COST_DATA.sql szkriptet. Biztos vagyok benne, hogy tévedek, de most így néz ki, és nem tudom, miért. Megnéztem az SQLERROR kódot, és lényegében azt jelenti, hogy egy nem létező objektumra utalok. Ez igaz, a DB2INST1 sémámban nincs meg a COST_SSCDATA tábla.

Ez egy Java Spring Boot projekt néhány DB2 adatbázissal és 3 sémával.

Igyekszem a lehető legtöbb információval szolgálni, de a biztonság kedvéért megváltoztattam néhány nevet IP-cím miatt.

Az én rövidített veremnyomom:

...
Caused by: org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateSqlException: 
Migration V1.2__ALTER_COST_SPREADSHEET_Table_ADD_FILENAME.sql failed
--------------------------------------------------------------------
SQL State  : 42704
Error Code : -204
Message    : DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2INST.COST_SSCDATA, DRIVER=4.19.66
Location   : db/migration/V1.2__ALTER_COST_SPREADSHEET_Table_ADD_FILENAME.sql (C:\projects-new\cirrus-spreadsheet-service\target\classes\db\migration\V1.2__ALTER_COST_SPREADSHEET_Table_ADD_FILENAME.sql)
Line       : 4
Statement  : ALTER TABLE COST_SSCDATA 
    add column FILENAME varchar(100)


    at org.flywaydb.core.internal.command.DbMigrate.doMigrateGroup (DbMigrate.java:365)

    at org.flywaydb.core.internal.command.DbMigrate.access$400 (DbMigrate.java:52)

    at org.flywaydb.core.internal.command.DbMigrate$5.call (DbMigrate.java:297)

    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute (TransactionTemplate.java:75)

    at org.flywaydb.core.internal.command.DbMigrate.applyMigrations (DbMigrate.java:294)

    at org.flywaydb.core.internal.command.DbMigrate.migrateGroup (DbMigrate.java:259)

    at org.flywaydb.core.internal.command.DbMigrate.access$300 (DbMigrate.java:52)

    at org.flywaydb.core.internal.command.DbMigrate$4.call (DbMigrate.java:179)

    at org.flywaydb.core.internal.command.DbMigrate$4.call (DbMigrate.java:176)

    at org.flywaydb.core.internal.database.Connection$1.call (Connection.java:155)

    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute (TransactionTemplate.java:75)

    at org.flywaydb.core.internal.database.Connection.lock (Connection.java:151)

    at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.lock (JdbcTableSchemaHistory.java:148)

    at org.flywaydb.core.internal.command.DbMigrate.migrateAll (DbMigrate.java:176)

    at org.flywaydb.core.internal.command.DbMigrate.migrate (DbMigrate.java:145)

    at org.flywaydb.core.Flyway$1.execute (Flyway.java:1206)

    at org.flywaydb.core.Flyway$1.execute (Flyway.java:1168)

    at org.flywaydb.core.Flyway.execute (Flyway.java:1655)

    at org.flywaydb.core.Flyway.migrate (Flyway.java:1168)

    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet (FlywayMigrationInitializer.java:66)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1758)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1695)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:573)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:495)

    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:317)

    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)

    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:315)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)

    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:304)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)

    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:251)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1135)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1062)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:583)

    at org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:91)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues (AutowiredAnnotationBeanPostProcessor.java:372)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1341)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:572)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:495)

    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0 (AbstractBeanFactory.java:317)

    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222)

    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:315)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:759)

    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:869)

    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:550)

    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh (ServletWebServerApplicationContext.java:140)

    at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:762)

    at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:398)

    at org.springframework.boot.SpringApplication.run (SpringApplication.java:330)

    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1258)

    at org.springframework.boot.SpringApplication.run (SpringApplication.java:1246)

    at com.mycompany.myproject.cost.spreadsheet.CostSpreadsheetUploadWebApplication.main (CostSpreadsheetUploadWebApplication.java:32)

    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)

    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)

    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke (Method.java:566)

    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:496)

    at java.lang.Thread.run (Thread.java:834)

Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2INST.COST_SSCDATA, DRIVER=4.19.66

V1__Create_COST_SSCDATA_Table.sql (rövidítve)

CREATE TABLE COST_SSCDATA
(
   SSCDATAID bigint PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),
   PROCESSGROUPID bigint,
   ...
)
;
CREATE UNIQUE INDEX SQL180420024015740 ON COST_SSCDATA(SSCDATAID)
;

V1.2__ALTER_COST_SPREADSHEET_Table_ADD_FILENAME.sql

--
-- Add new field (FILENAME) to this table for storing name of the uploaded file (with extension)
--
ALTER TABLE COST_SSCDATA 
    add column FILENAME varchar(100);
        
flyway info
Flyway Community Edition 7.5.4 by Redgate
Database: jdbc:db2://localhost:50000/bcupload (DB2/LINUXX8664 11.5)
Schema version: 1
+-----------+---------+------------------------------------------------------------+----------+---------------------+----------+
|           | 1       | << Flyway Baseline >>                                      | BASELINE | 2021-03-02 06:25:36 | Baseline |
| Versioned | 1.1     | Create COST SPREADSHEET Table                              | SQL      |                     | Pending  |
| Versioned | 1.2     | ALTER COST SPREADSHEET Table ADD FILENAME                  | SQL      |                     | Pending  |
| Versioned | 1.3     | Create JOB5 EXECUTION Table                                | SQL      |                     | Pending  |
| Versioned | 1.4     | Create JOB5 EXECUTION SPREADSHEET Table                    | SQL      |                     | Pending  |
| Versioned | 1.5     | Create COST SPREADSHEET BACKUP Table                       | SQL      |                     | Pending  |
| Versioned | 1.6     | ALTER COST SPREADSHEET BACKUP Table ADD STATUS REASON      | SQL      |                     | Pending  |
| Versioned | 1.7     | ALTER COST SPREADSHEET BACKUP Table UPDATE ORIG COMPANY CD | SQL      |                     | Pending  | 
02.03.2021

  • Mit kapsz, ha lefutsz a repülőútra vonatkozó információkat? Érdekelne, hogy a V1-nél megfutotta-e a repülőút alapvonalát a céljával, ami azt jelenti, hogy figyelmen kívül hagyja ezt a szkriptet? 02.03.2021
  • @DavidAtkinson Hozzáadott flyway info eredmény, elnézést a formázásért. 02.03.2021
  • Az áttelepítések állapota függőben van (még nem alkalmazták). Nézze meg a konfigurált táblázatot a repülőút előzményeinek megerősítéséhez (a „végrehajtási_idő” és a „siker” oszlopokon keresztül). 03.03.2021

Válaszok:


1

Úgy tűnik, hogy az alapértéket 1-re állította be, ami azt jelenti, hogy a rendszer figyelmen kívül hagyja a v1-től és korábbi verziótól származó összes szkriptet. Ha átnevezi az áttelepítési parancsfájlt V1__Create_COST_DATA.sql-ről V1.01__Create_COST_DATA.sql-re, akkor minden rendben lehet!

03.03.2021
  • Másoltam a sort egy már telepített működő verzióról, és NULL-ra kényszerítettem a verziót az üres vagy más helyett. Azt is láttam, hogy a flyway_schema_history táblában van egy rekord a szükséges migrációs fájlhoz; mintha már megtörtént volna. Nem tudom, hogyan vált ki a szinkronból. Eltávolítottam a hibás migrációs befejezési rekordot, és az első rekordnál NULL-ra módosítottam a verziót, valamint type='BASELINE'-ról 'SCHEMA'-ra, majd működött. Próbáltam megtisztítani a parancssori flyway clean, javítás stb. segítségével, de soha nem sikerült teljesen megjavítani. 03.03.2021
  • A fejlesztői dobozomon átneveztem a fájlokat az általad említett módon. Megnéztem a forráskódot, de nem találtam, hogy a Flyway hol alakítja át a verziószámot tényleges számmá, inkább úgy tűnik, hogy karakterláncként kezelte. Ezért, hogy rákényszerítsem a megfelelő sorrend használatára, az összes releváns fájlt átneveztem nullázottra. Amikor tesztelésre/gyártásra helyezzük üzembe, milyen lépéseket kell megtenni a telepítés során? 03.03.2021
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..