fix(테이블타입): syncScreenLayoutsInputType SQL — SCREEN_LAYOUTS.PROPERTIES 가 varchar 라 JSONB 캐스팅 추가
Build & Deploy to K8s / build-and-deploy (push) Successful in 8m19s
Build & Deploy to K8s / build-and-deploy (push) Successful in 8m19s
운영 DB 의 SCREEN_LAYOUTS.PROPERTIES 컬럼이 character varying 인데 mapper SQL 은 PROPERTIES->>'...' 와 JSONB_SET(PROPERTIES, ...) 를 그대로 사용해 PG 가 'operator does not exist: character varying ->> unknown' 으로 거부. 이로 인해 syncScreenLayouts 가 던지는 SQLException 이 try-catch 로 무시되긴 하지만 외부 @Transactional 이 이미 aborted 상태가 되어 후속 ensureTableInLabels (insertTableLabelIfNotExists) 가 'current transaction is aborted' 로 연쇄 실패 → 컬럼 설정 저장 500. - SL.PROPERTIES::JSONB 캐스팅 (WHERE / SET 양쪽) - JSONB_SET 결과를 ::TEXT 로 캐스팅해 varchar 컬럼에 안전 저장 - 운영 4 DB (invyone, siflex/test01/test02 _invyone) 전수 검증: invalid JSON row 0건 → 캐스팅 안전 mapper SQL 만 변경. DB 마이그레이션 불필요. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -667,15 +667,15 @@
|
||||
SET
|
||||
PROPERTIES = JSONB_SET(
|
||||
JSONB_SET(
|
||||
SL.PROPERTIES,
|
||||
SL.PROPERTIES::JSONB,
|
||||
'{widgetType}', TO_JSONB(#{component_id}::TEXT)
|
||||
),
|
||||
'{componentType}', TO_JSONB(#{component_id}::TEXT)
|
||||
)
|
||||
)::TEXT
|
||||
FROM SCREEN_DEFINITIONS SD
|
||||
WHERE SL.SCREEN_ID = SD.SCREEN_ID
|
||||
AND SL.PROPERTIES->>'tableName' = #{table_name}
|
||||
AND SL.PROPERTIES->>'columnName' = #{column_name}
|
||||
AND SL.PROPERTIES::JSONB->>'tableName' = #{table_name}
|
||||
AND SL.PROPERTIES::JSONB->>'columnName' = #{column_name}
|
||||
AND ((SD.COMPANY_CODE = #{company_code} OR SD.COMPANY_CODE = '*') OR #{company_code} = '*')
|
||||
</update>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user