[PostgreSQL] ::bpchar, ::character varying 의미
postgresql에서 테이블 생성시 create 쿼리문에 아래와 같이 ::bpchar, ::character varying 이 자동으로 추가될 때가 있다.
이것은 무엇을 의미하는 걸까?
CREATE TABLE t1
(
id NUMERIC (11) NOT NULL
, mmbr_status CHARACTER (2) NOT NULL DEFAULT 'S'
, country_code VARCHAR (8) NOT NULL DEFAULT '82'
)
위와 같이 테이블 생성 쿼리를 날린 후
생성된 테이블의 속성 값을 보면 아래처럼 뜬다.
CREATE TABLE t1
(
id NUMERIC (11) NOT NULL
, mmbr_status CHARACTER (2) NOT NULL DEFAULT 'S'::bpchar
, country_code VARCHAR (8) NOT NULL DEFAULT '82'::character varying
, CONSTRAINT pk_t1 PRIMARY KEY (id)
)
::bpchar, ::character varying 는 내가 입력한 적이 없지만, table properties에는 적혀있다.
이는 무엇을 의미할까?
[의미]
:: 는 앞의 타입을 뒤의 타입으로 바꿔주는 역할을 한다.
1) ::bpchar
mmbr_status CHARACTER (2) NOT NULL DEFAULT 'S'::bpchar
bpchar는 공백 채움 문자 형식이다.
위 쿼리를 보면 mmbr_status 컬럼은 CHARACTER(2) 타입으로, 가변 길이인 VARCHAR가 아닌 고정 길이인 CHARACRER 타입이다. 이때 DEFAULT 값이 'S'인데, 이는 1글자이므로, CHARACTER(2) 타입에 'S'를 집어넣으면 한 글자만큼의 공간이 남는다. 고정길이인 CHARACTER 속성에 의해 이 공백을 채워야하므로 ::bpchar 구문이 자동으로 들어가 빈 공백을 채우게 된다.
2) ::charavter varying
country_code VARCHAR (8) NOT NULL DEFAULT '82'::character varying
country_code 컬럼은 VARCHAR 타입인데, DEFAULT 값은 '82'로 숫자를 집어 넣었다. 따라서 이 '82'를 숫자가 아닌 character로 변환시켜주는 역할이 ::character varying의 역할이며, 이는 꼭 default 값에만 한정된 게 아니라 country_code에 들어가는 모든 값을 character 타입으로 변환시켜주는 역할을 한다.