문자열(varchar) 열을 정수로 변경 중
필드 유형을에서 변경하여 string(varchar) 열을 정수로 변경하는 빠른 안내 string
끝 long
.
설명 description
환경
Adobe Campaign Classic Adobe Campaign
문제
현재 형식이지만 테이블의 열 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://www.postgresqltutorial.com/postgresql-change-column-type/
솔루션 2 은(는) 가장 좋은 옵션입니다. 그게 바로 우리가 ALTER TABLE
고객.
해당 ALTER TABLE
그것도 괜찮죠 데이터 형식 유효성 검사기… 질문에 답합니다. 행 중 하나에 알파 데이터가 있으면 (ALTER TABLE
)은 바운스됩니다… 성공하면 모두 설정됩니다.
스키마는 다음과 유사해야 합니다. INT
, 아님 string
또한 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은 전체 테이블을 다시 빌드해야 합니다. (완전 진공처럼).