Skip to content

Commit 7c95d2f

Browse files
committed
fix: flyway checksum mismatch복구
1 parent 420b227 commit 7c95d2f

5 files changed

Lines changed: 104 additions & 94 deletions
Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
/* =========================================================
22
* 1. Table: v2_orders
33
* ========================================================= */
4-
CREATE TABLE IF NOT EXISTS v2_orders
5-
(
6-
v2_order_id VARCHAR(36) PRIMARY KEY,
7-
ticket_id BIGINT NOT NULL,
8-
amount BIGINT NOT NULL,
9-
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
10-
payment_key VARCHAR(255) NULL,
11-
payment_id BIGINT NULL,
4+
CREATE TABLE IF NOT EXISTS v2_orders (
5+
v2_order_id VARCHAR(36) PRIMARY KEY,
6+
ticket_id BIGINT NOT NULL,
7+
amount BIGINT NOT NULL,
8+
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
9+
payment_key VARCHAR(255) NULL,
10+
payment_id BIGINT NULL,
1211

13-
created_at TIMESTAMP NULL,
14-
modified_at TIMESTAMP NULL
12+
created_at TIMESTAMP NULL,
13+
modified_at TIMESTAMP NULL
1514
);
1615

1716

@@ -23,57 +22,57 @@ ALTER TABLE v2_orders
2322

2423

2524
/* =========================================================
26-
* 3. Foreign Key: v2_orders.ticket_id → tickets.id
25+
* 3. Foreign Key: v2_orders.ticket_id → ticket.ticket_id
2726
* ========================================================= */
28-
DO
29-
$$
30-
BEGIN
31-
IF NOT EXISTS (SELECT 1
32-
FROM pg_constraint
33-
WHERE conname = 'fk_v2_order_ticket') THEN
34-
ALTER TABLE v2_orders
35-
ADD CONSTRAINT fk_v2_order_ticket
36-
FOREIGN KEY (ticket_id)
37-
REFERENCES tickets (id);
38-
END IF;
39-
END
40-
$$;
27+
DO $$
28+
BEGIN
29+
IF NOT EXISTS (
30+
SELECT 1
31+
FROM pg_constraint
32+
WHERE conname = 'fk_v2_order_ticket'
33+
) THEN
34+
ALTER TABLE v2_orders
35+
ADD CONSTRAINT fk_v2_order_ticket
36+
FOREIGN KEY (ticket_id)
37+
REFERENCES ticket(ticket_id);
38+
END IF;
39+
END $$;
4140

4241

4342
/* =========================================================
4443
* 3. Foreign Key: v2_orders.payment_id → payment.payment_id
4544
* ========================================================= */
46-
DO
47-
$$
48-
BEGIN
49-
IF NOT EXISTS (SELECT 1
50-
FROM pg_constraint
51-
WHERE conname = 'fk_v2_order_payment') THEN
52-
ALTER TABLE v2_orders
53-
ADD CONSTRAINT fk_v2_order_payment
54-
FOREIGN KEY (payment_id)
55-
REFERENCES payment (payment_id);
56-
END IF;
57-
END
58-
$$;
45+
DO $$
46+
BEGIN
47+
IF NOT EXISTS (
48+
SELECT 1
49+
FROM pg_constraint
50+
WHERE conname = 'fk_v2_order_payment'
51+
) THEN
52+
ALTER TABLE v2_orders
53+
ADD CONSTRAINT fk_v2_order_payment
54+
FOREIGN KEY (payment_id)
55+
REFERENCES payment(payment_id);
56+
END IF;
57+
END $$;
5958

6059

6160
/* =========================================================
6261
* 4. Index: v2_orders.ticket_id (조회 성능)
6362
* ========================================================= */
6463
CREATE INDEX IF NOT EXISTS idx_v2_orders_ticket_id
65-
ON v2_orders (ticket_id);
64+
ON v2_orders(ticket_id);
6665

6766

6867
/* =========================================================
6968
* 5. Index: v2_orders.payment_id (조회 성능)
7069
* ========================================================= */
7170
CREATE INDEX IF NOT EXISTS idx_v2_orders_payment_id
72-
ON v2_orders (payment_id);
71+
ON v2_orders(payment_id);
7372

7473

7574
/* =========================================================
7675
* 6. Index: v2_orders.payment_key (조회 성능)
7776
* ========================================================= */
7877
CREATE INDEX IF NOT EXISTS idx_v2_orders_payment_key
79-
ON v2_orders (payment_key);
78+
ON v2_orders(payment_key);

backend/src/main/resources/db/migration/V20251231_03__add_store_relation_and_backfill_events_and_admin_users.sql

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ALTER TABLE events
55
ADD COLUMN IF NOT EXISTS store_id BIGINT;
66

77
/* ============================================================
8-
* 2~4. Legacy Store 생성 + backfill (events/users)
8+
* 2. Legacy Store 생성 (없으면 생성, 있으면 재사용)
99
* ============================================================ */
1010
DO
1111
$$
@@ -36,12 +36,18 @@ $$
3636
RETURNING id INTO v_store_id;
3737
END IF;
3838

39-
/* 3. 기존 이벤트 → Legacy Store로 backfill */
39+
/* ========================================================
40+
* 3. 기존 이벤트 → Legacy Store로 backfill
41+
* ======================================================== */
4042
UPDATE events
4143
SET store_id = v_store_id
4244
WHERE store_id IS NULL;
4345

44-
/* 4. 기존 ADMIN 사용자 → Legacy Store로 backfill */
46+
/* ========================================================
47+
* 4. 기존 ADMIN 사용자 → Legacy Store로 backfill
48+
* - store_id가 NULL인 경우만
49+
* - deleted_at IS NULL (소프트 삭제 제외)
50+
* ======================================================== */
4551
UPDATE users
4652
SET store_id = v_store_id
4753
WHERE role = 'ADMIN'
@@ -52,36 +58,20 @@ $$;
5258

5359
/* ============================================================
5460
* 5. events.store_id NOT NULL 강제
55-
* - 이미 3번에서 NULL backfill 했으므로 안전
5661
* ============================================================ */
5762
ALTER TABLE events
5863
ALTER COLUMN store_id SET NOT NULL;
5964

6065
/* ============================================================
61-
* 6. FK 제약 추가 (이미 존재하면 스킵)
66+
* 6. FK 제약 추가
6267
* ============================================================ */
63-
DO
64-
$$
65-
BEGIN
66-
-- events FK
67-
IF NOT EXISTS (SELECT 1
68-
FROM pg_constraint
69-
WHERE conname = 'fk_events_store') THEN
70-
ALTER TABLE events
71-
ADD CONSTRAINT fk_events_store
72-
FOREIGN KEY (store_id) REFERENCES stores (id);
73-
END IF;
68+
ALTER TABLE events
69+
ADD CONSTRAINT fk_events_store
70+
FOREIGN KEY (store_id) REFERENCES stores (id);
7471

75-
-- users FK
76-
IF NOT EXISTS (SELECT 1
77-
FROM pg_constraint
78-
WHERE conname = 'fk_user_store') THEN
79-
ALTER TABLE users
80-
ADD CONSTRAINT fk_user_store
81-
FOREIGN KEY (store_id) REFERENCES stores (id);
82-
END IF;
83-
END
84-
$$;
72+
ALTER TABLE users
73+
ADD CONSTRAINT fk_user_store
74+
FOREIGN KEY (store_id) REFERENCES stores (id);
8575

8676
/* ============================================================
8777
* 7. 인덱스 (조회/조인 성능)
@@ -90,4 +80,4 @@ CREATE INDEX IF NOT EXISTS idx_events_store_id
9080
ON events (store_id);
9181

9282
CREATE INDEX IF NOT EXISTS idx_users_store_id
93-
ON users (store_id);
83+
ON users (store_id);

backend/src/main/resources/db/migration/V20260105_00__add_transferred_to_tickets.sql

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,3 @@ ALTER TABLE tickets
88

99
/* 2) 컬럼 코멘트 */
1010
COMMENT ON COLUMN tickets.transferred IS '양도 여부 (1회만 양도 가능)';
11-
12-
13-
/* =========================================================
14-
* ticket_transfer_history - 양도 이력 테이블
15-
* ========================================================= */
16-
17-
/* 3) 양도 이력 테이블 생성 */
18-
CREATE TABLE IF NOT EXISTS ticket_transfer_history (
19-
id BIGSERIAL PRIMARY KEY,
20-
ticket_id BIGINT NOT NULL,
21-
from_user_id BIGINT NOT NULL,
22-
to_user_id BIGINT NOT NULL,
23-
transferred_at TIMESTAMP NOT NULL,
24-
created_at TIMESTAMP,
25-
modified_at TIMESTAMP
26-
);
27-
28-
/* 4) 인덱스 */
29-
CREATE INDEX IF NOT EXISTS idx_transfer_history_ticket_id
30-
ON ticket_transfer_history (ticket_id);
31-
32-
/* 5) 코멘트 */
33-
COMMENT ON TABLE ticket_transfer_history IS '티켓 양도 이력';
34-
COMMENT ON COLUMN ticket_transfer_history.ticket_id IS '양도된 티켓 ID';
35-
COMMENT ON COLUMN ticket_transfer_history.from_user_id IS '양도한 사용자 ID';
36-
COMMENT ON COLUMN ticket_transfer_history.to_user_id IS '양도받은 사용자 ID';
37-
COMMENT ON COLUMN ticket_transfer_history.transferred_at IS '양도 시각';
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* =========================================================
2+
* ticket_transfer_history - 양도 이력 테이블
3+
* (V20260105_00에서 분리됨)
4+
* ========================================================= */
5+
6+
/* 1) 양도 이력 테이블 생성 */
7+
CREATE TABLE IF NOT EXISTS ticket_transfer_history (
8+
id BIGSERIAL PRIMARY KEY,
9+
ticket_id BIGINT NOT NULL,
10+
from_user_id BIGINT NOT NULL,
11+
to_user_id BIGINT NOT NULL,
12+
transferred_at TIMESTAMP NOT NULL,
13+
created_at TIMESTAMP,
14+
modified_at TIMESTAMP
15+
);
16+
17+
/* 2) 인덱스 */
18+
CREATE INDEX IF NOT EXISTS idx_transfer_history_ticket_id
19+
ON ticket_transfer_history (ticket_id);
20+
21+
/* 3) 코멘트 */
22+
COMMENT ON TABLE ticket_transfer_history IS '티켓 양도 이력';
23+
COMMENT ON COLUMN ticket_transfer_history.ticket_id IS '양도된 티켓 ID';
24+
COMMENT ON COLUMN ticket_transfer_history.from_user_id IS '양도한 사용자 ID';
25+
COMMENT ON COLUMN ticket_transfer_history.to_user_id IS '양도받은 사용자 ID';
26+
COMMENT ON COLUMN ticket_transfer_history.transferred_at IS '양도 시각';
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/* =========================================================
2+
* v2_orders FK 수정: ticket(ticket_id) → tickets(id)
3+
* 원본 V20251231_01에서 잘못된 참조가 있었음
4+
* ========================================================= */
5+
6+
/* 1) 기존 FK 삭제 (있는 경우만) */
7+
DO $$
8+
BEGIN
9+
IF EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_v2_order_ticket') THEN
10+
ALTER TABLE v2_orders DROP CONSTRAINT fk_v2_order_ticket;
11+
END IF;
12+
END $$;
13+
14+
/* 2) 올바른 FK 재생성 */
15+
DO $$
16+
BEGIN
17+
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_v2_order_ticket') THEN
18+
ALTER TABLE v2_orders
19+
ADD CONSTRAINT fk_v2_order_ticket
20+
FOREIGN KEY (ticket_id) REFERENCES tickets(id);
21+
END IF;
22+
END $$;

0 commit comments

Comments
 (0)