fix(db): V37 crashed boot — company was redefined via CREATE IF NOT EXISTS (no-op) then indexed on missing column
V2 already has `company` (id PK, name/registration_no/phone). V37's CREATE TABLE IF NOT EXISTS company was a no-op, so the follow-up `CREATE INDEX ON company (tenant_id, company_name)` hit "column tenant_id does not exist", failing Flyway and rolling the deploy back to the old jar (V36). Fix: expand the existing V2 company via idempotent ALTER ADD COLUMN + backfill (name->company_name, registration_no->biz_no, phone->contact_tel). V38 re-backfills new rows. Verified by BEGIN...ROLLBACK dry-run of V37+V38 against the live schema (0 errors). Local unit tests don't execute Flyway, so this class of error only surfaces at boot — same lesson as V17/V19. Dry-run against real schema before deploy for migrations touching legacy tables. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
5ddd7136a9
commit
69a8b5288d
@ -21,22 +21,24 @@ CREATE TABLE IF NOT EXISTS dept (
|
|||||||
);
|
);
|
||||||
CREATE INDEX IF NOT EXISTS idx_dept_parent ON dept (tenant_id, parent_id, sort_order);
|
CREATE INDEX IF NOT EXISTS idx_dept_parent ON dept (tenant_id, parent_id, sort_order);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS company (
|
-- ★company 는 V2 에 이미 존재하는 마스터(공사/등록업체) — 재정의(CREATE)하면 no-op 라 신규 컬럼이 안 생겨
|
||||||
tenant_id varchar(40) NOT NULL DEFAULT 'KINTEX',
|
-- 후행 인덱스가 없는 컬럼을 참조해 실패한다(2026-07-12 배포 크래시). 기존 테이블을 멱등 ALTER 로 확장한다.
|
||||||
id varchar(40) NOT NULL,
|
-- PK(id)·기존 컬럼(name·registration_no·phone·registered·category)은 불변 — auction 등 FK 참조 보존.
|
||||||
company_name varchar(200) NOT NULL,
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS tenant_id varchar(40) NOT NULL DEFAULT 'KINTEX';
|
||||||
biz_no varchar(40),
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS company_name varchar(200);
|
||||||
ceo_name varchar(120),
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS biz_no varchar(40);
|
||||||
biz_type varchar(120),
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS ceo_name varchar(120);
|
||||||
contact_name varchar(120),
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS biz_type varchar(120);
|
||||||
contact_tel varchar(60), -- 저장은 원문, 응답은 마스킹(코드 계층)
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS contact_name varchar(120);
|
||||||
address varchar(400),
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS contact_tel varchar(60); -- 저장 원문, 응답 마스킹(코드 계층)
|
||||||
partner_type varchar(40), -- 공통코드(PARTNER_TYPE) 값
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS address varchar(400);
|
||||||
use_yn char(1) NOT NULL DEFAULT 'Y',
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS partner_type varchar(40); -- 공통코드(PARTNER_TYPE)
|
||||||
created_at timestamptz NOT NULL DEFAULT now(),
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS use_yn char(1) NOT NULL DEFAULT 'Y';
|
||||||
updated_at timestamptz NOT NULL DEFAULT now(),
|
ALTER TABLE company ADD COLUMN IF NOT EXISTS updated_at timestamptz NOT NULL DEFAULT now();
|
||||||
PRIMARY KEY (tenant_id, id)
|
-- V2 기존 컬럼 → W12 컬럼 백필(멱등)
|
||||||
);
|
UPDATE company SET company_name = name WHERE company_name IS NULL AND name IS NOT NULL;
|
||||||
|
UPDATE company SET biz_no = registration_no WHERE biz_no IS NULL AND registration_no IS NOT NULL;
|
||||||
|
UPDATE company SET contact_tel = phone WHERE contact_tel IS NULL AND phone IS NOT NULL;
|
||||||
CREATE INDEX IF NOT EXISTS idx_company_name ON company (tenant_id, company_name);
|
CREATE INDEX IF NOT EXISTS idx_company_name ON company (tenant_id, company_name);
|
||||||
|
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
|||||||
@ -544,3 +544,8 @@ ON CONFLICT (id) DO NOTHING;
|
|||||||
-- -- 부스 판매분포: SELECT status,count(*) FROM booth_sale WHERE event_id='e-2026-smf' GROUP BY status;
|
-- -- 부스 판매분포: SELECT status,count(*) FROM booth_sale WHERE event_id='e-2026-smf' GROUP BY status;
|
||||||
-- -- 리드 15/핫4: SELECT count(*), count(*) FILTER(WHERE score>=80) FROM lead WHERE event_id='e-2026-smf';
|
-- -- 리드 15/핫4: SELECT count(*), count(*) FILTER(WHERE score>=80) FROM lead WHERE event_id='e-2026-smf';
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- 신규 company 행 company_name 정합(V37 이 name→company_name 백필하나 본 파일 신규행은 V37 이후 삽입되므로 재백필).
|
||||||
|
UPDATE company SET company_name = name WHERE company_name IS NULL AND name IS NOT NULL;
|
||||||
|
UPDATE company SET biz_no = registration_no WHERE biz_no IS NULL AND registration_no IS NOT NULL;
|
||||||
|
UPDATE company SET contact_tel = phone WHERE contact_tel IS NULL AND phone IS NOT NULL;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user