SQL

[PostgreSQL] ::bpchar, ::character varying 의미

15호의 개발자 2022. 6. 29. 12:00
반응형

[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 타입으로 변환시켜주는 역할을 한다.

 

 

 

반응형