문자열(varchar) 열을 정수로 변경 중
필드 형식을 string
에서 long
(으)로 변경하여 문자열(varchar) 열을 정수로 변경하는 빠른 지침입니다.
설명 description
환경
- Adobe Campaign Classic (ACC)
- Adobe Campaign (AC)
문제
테이블의 열로서 현재 형식이 string
이지만 이 열에는 숫자가 들어 있으며 항상 숫자가 들어 있습니다.
열 형식을 varchar
에서 int
(으)로 변경하고 이미 있는 모든 숫자를 잃지 않는 방법이 있습니까?
예를 들어 다음과 같은 alter 명령(아래와 같이) 또는 기타 접근 방식을 실행하는 방법이 있습니다.
alter table myTable alter column vColumn int;
해결 방법 resolution
솔루션
솔루션 1:
int
유형의 임시 열을 도입합니다.- 데이터베이스를 업데이트합니다.
- 워크플로우를 만들어 원래 열의 값을 새 열에 복사합니다.
- 열 유형을 변경하고 데이터베이스를 업데이트합니다.
- 1단계에 도입된 열의 값을 원래 열로 복사하는 워크플로우를 만듭니다.
- 임시 열을 삭제하고 데이터베이스를 업데이트합니다.
솔루션 2(기본 설정):
- 스키마를 편집합니다. 필드 형식을
string
에서long
(으)로 변경합니다. UPDATE DB STRUCTURE
동안ALTER
명령을 아래ALTER
명령으로 바꾸십시오. 그러면 열 유형이INTEGER
(으)로 변경됩니다.
ALTER TABLE NmsRecipient ALTER COLUMN sBoardingPass TYPE sBoardingPass::integer 를 사용하여 정수
https://neon.tech/postgresql/postgresql-tutorial/postgresql-change-column-type
솔루션 2 이 최상의 옵션입니다. 고객의 ALTER TABLE
을(를) 처리하는 정확한 방법입니다.
해당 ALTER TABLE
은(는) 데이터 형식 유효성 검사기이기도 합니다. 질문에 답합니다. 행 중 하나에 알파 데이터가 있으면 전환(ALTER TABLE
)이 바운스됩니다. 성공하면 모든 준비가 완료됩니다.
스키마는 string
이(가) 아닌 INT
이어야 하며 3-4 클래스 RDS 업사이징을 사용해도 해결할 수 없는 모든 종류의 성능 문제를 일으킵니다.
공간이 있는 경우 인덱스와 함께 백업 테이블을 만들고 시간을 설정하는 것이 좋습니다.
select * into backup_nmsrecipient from nmsrecipient;
// add indexes to get accurate simulation
\timing
예:
ALTER TABLE backup_NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;
일반적으로 이 작업은 차단되지 않는 사용자 지정 테이블에서 수행되므로 pg_stat_activity
을(를) 시청하십시오.
nmsRecipient
테이블이 크면 이 작업 중에 차단될 수 있습니다.
PostgreSQL은 전체 테이블 (예: 전체 진공)을(를) 다시 빌드해야 합니다.