ALTER TABLE 예
다음은 ALTER TABLE 명령의 기본적인 사용법을 보여주는 예입니다.
테이블 또는 뷰의 이름 바꾸기
다음 명령을 실행하면 USERS 테이블의 이름이 USERS_BKUP로 바뀝니다.
alter table users rename to users_bkup;
이 형식의 명령을 사용하여 뷰의 이름을 바꿀 수도 있습니다.
테이블 또는 뷰의 소유자 변경
다음 명령을 실행하면 VENUE 테이블 소유자가 사용자 DWUSER로 변경됩니다.
alter table venue owner to dwuser;
다음 명령을 실행하면 뷰가 생성된 다음, 소유자가 변경됩니다.
create view vdate as select * from date; alter table vdate owner to vuser;
열 이름 바꾸기
다음 명령을 실행하면 VENUE 테이블에 있는 VENUESEATS 열의 이름이 VENUESIZE로 바뀝니다.
alter table venue rename column venueseats to venuesize;
테이블 제약 조건 삭제
기본 키, 외래 키 또는 고유한 제약 조건과 같은 테이블 제약 조건을 삭제하려면, 먼저 제약 조건의 내부 이름을 찾습니다. 그런 다음 ALTER TABLE 명령에서 제약 이름을 지정합니다. 다음 예제에서는 CATEGORY 테이블에 대한 제약 조건을 찾은 다음, 이름이 category_pkey
인 기본 키를 삭제합니다.
select constraint_name, constraint_type from information_schema.table_constraints where constraint_schema ='public' and table_name = 'category';
constraint_name | constraint_type ----------------+---------------- category_pkey | PRIMARY KEY
alter table category drop constraint category_pkey;
VARCHAR 열 변경
스토리지를 절약하려면 처음에 현재 데이터 요구 사항에 필요한 최소 크기인 VARCHAR 열로 테이블을 정의하면 됩니다. 나중에 더 긴 문자열을 수용해야 하는 경우 테이블을 변경하여 열 크기를 늘릴 수 있습니다.
다음 예에서는 EVENTNAME 열 크기를 VARCHAR(300)로 변경합니다.
alter table event alter column eventname type varchar(300);
열에 대한 압축 인코딩 변경
열의 압축 인코딩을 변경할 수 있습니다. 아래에서 이 접근 방식을 보여주는 일련의 예를 찾아볼 수 있습니다. 이러한 예에 대한 테이블 정의는 다음과 같습니다.
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
다음 문은 열 c0에 대한 압축 인코딩을 LZO 인코딩에서 AZ64 인코딩으로 변경합니다.
alter table t1 alter column c0 encode az64;
다음 문은 열 c1에 대한 압축 인코딩을 Zstandard 인코딩에서 AZ64 인코딩으로 변경합니다.
alter table t1 alter column c1 encode az64;
다음 문은 열 c2에 대한 압축 인코딩을 LZO 인코딩에서 Byte-dictionary 인코딩으로 변경합니다.
alter table t1 alter column c2 encode bytedict;
다음 문은 열 c3에 대한 압축 인코딩을 Zstandard 인코딩에서 Runlength 인코딩으로 변경합니다.
alter table t1 alter column c3 encode runlength;
DISTSTYLE KEY DISTKEY 열 변경
다음 예에서는 테이블의 DISTSTYLE 및 DISTKEY를 변경하는 방법을 보여 줍니다.
EVEN 배포 스타일의 테이블을 생성합니다. SVV_TABLE_INFO 보기는 DISTSTYLE이 EVEN임을 보여 줍니다.
create table inventory( inv_date_sk int4 not null , inv_item_sk int4 not null , inv_warehouse_sk int4 not null , inv_quantity_on_hand int4 ) diststyle even; Insert into inventory values(1,1,1,1); select "table", "diststyle" from svv_table_info;
table | diststyle -----------+---------------- inventory | EVEN
DISTKEY 테이블을 inv_warehouse_sk
로 변경합니다. SVV_TABLE_INFO 보기는 inv_warehouse_sk
열을 결과 배포 키로 보여 줍니다.
alter table inventory alter diststyle key distkey inv_warehouse_sk; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+----------------------- inventory | KEY(inv_warehouse_sk)
DISTKEY 테이블을 inv_item_sk
로 변경합니다. SVV_TABLE_INFO 보기는 inv_item_sk
열을 결과 배포 키로 보여 줍니다.
alter table inventory alter distkey inv_item_sk; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+----------------------- inventory | KEY(inv_item_sk)
테이블을 DISTSTYLE ALL로 변경
다음 예에서는 테이블을 DISTSTYLE ALL로 변경하는 방법을 보여 줍니다.
EVEN 배포 스타일의 테이블을 생성합니다. SVV_TABLE_INFO 보기는 DISTSTYLE이 EVEN임을 보여 줍니다.
create table inventory( inv_date_sk int4 not null , inv_item_sk int4 not null , inv_warehouse_sk int4 not null , inv_quantity_on_hand int4 ) diststyle even; Insert into inventory values(1,1,1,1); select "table", "diststyle" from svv_table_info;
table | diststyle -----------+---------------- inventory | EVEN
DISTSTYLE 테이블을 ALL로 변경합니다. SVV_TABLE_INFO 보기에는 변경된 DISTSYTLE이 표시됩니다.
alter table inventory alter diststyle all; select "table", "diststyle" from svv_table_info;
table | diststyle -----------+---------------- inventory | ALL
테이블 SORTKEY 변경
복합 정렬 키가 있거나 정렬 키가 없도록 테이블을 변경할 수 있습니다.
다음 테이블 정의에서 테이블 t1
은 인터리브 정렬 키로 정의됩니다.
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
다음 명령은 테이블을 인터리브 정렬 키에서 복합 정렬 키로 변경합니다.
alter table t1 alter sortkey(c0, c1);
다음 명령은 인터리브 정렬 키를 제거하도록 테이블을 변경합니다.
alter table t1 alter sortkey none;
다음 테이블 정의에서 테이블 t1
은 정렬 키로 열 c0
을 사용하여 정의됩니다.
create table t1 (c0 int, c1 int) sortkey(c0);
다음 명령은 테이블 t1
을 복합 정렬 키로 변경합니다.
alter table t1 alter sortkey(c0, c1);
테이블을 ENCODE AUTO로 변경
다음 예에서는 테이블을 ENCODE AUTO로 변경하는 방법을 보여줍니다.
이 예에 대한 테이블 정의는 다음과 같습니다. 열 c0
은 인코딩 형식 AZ64로 정의되고 열 c1
은 인코딩 형식 LZO로 정의됩니다.
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
이 테이블의 경우 다음 문은 인코딩을 AUTO로 변경합니다.
alter table t1 alter encode auto;
다음 예에서는 ENCODE AUTO 설정을 제거하기 위해 테이블을 변경하는 방법을 보여줍니다.
이 예에 대한 테이블 정의는 다음과 같습니다. 테이블 열은 인코딩 없이 정의됩니다. 이 경우 인코딩은 ENCODE AUTO로 기본 설정됩니다.
create table t2(c0 int, c1 varchar);
이 테이블의 경우 다음 문은 c0 열의 인코딩을 LZO로 변경합니다. 테이블 인코딩이 더 이상 ENCODE AUTO로 설정되지 않습니다.
alter table t2 alter column c0 encode lzo;;
행 수준 보안 통제 변경
다음 명령은 테이블에 대해 RLS를 해제합니다.
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
다음 명령은 테이블에 대해 RLS를 설정합니다.
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
다음 명령은 테이블에 대해 RLS를 활성화하고 데이터 공유를 통해 액세스할 수 있도록 합니다.
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON; ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
다음 명령은 테이블에 대해 RLS를 활성화하고 데이터 공유를 통해 액세스할 수 없도록 합니다.
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON; ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
다음 명령은 테이블에 대해 RLS를 활성화하고 RLS 접속사 유형을 OR로 설정합니다.
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
다음 명령은 테이블에 대해 RLS를 활성화하고 RLS 접속사 유형을 AND로 설정합니다.
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;