실제 테이블을 만들기 전에 PostgreSQL의 자료형을 살펴 보도록한다.
먼저 pg에서 설명하는 데이터타입 표를 보자
명칭
|
별명 | 설명 |
bigint | int8 | 8 바이트 부호있는 정수 |
bigserial | serial8 | 자동 증분 8 바이트 정수 |
bit [ ( n ) ] | 고정 길이 비트열 | |
bit varying [ ( n ) ] | varbit | 가변 길이 비트열 |
boolean | bool | 논리값 (true / false) |
box | 평면 사각형 | |
bytea | 이진 데이터 ( "바이트 배열 (byte array)") | |
character varying [ ( n ) ] | varchar [ ( n ) ] | 가변 길이 문자열 |
character [ ( n ) ] | char [ ( n ) ] | 고정 길이 문자열 |
cidr | IPv4 또는 IPv6 네트워크 주소 | |
circle | 평면 원형 | |
date | 달력의 날짜 (연월일) | |
double precision | float8 | double (8 바이트) |
inet | IPv4 또는 IPv6 호스트 주소 | |
integer | int , int4 | 4 바이트 부호있는 정수 |
interval [ fields ] [ ( p ) ] | 시간 간격 | |
json | 텍스트 json 데이터 | |
jsonb | 바이너리 json 데이터 | |
line | 평면의 무한 직선 | |
lseg lseg | 평면 위의 선분 | |
macaddr | MAC (Media Access Control) 주소 | |
money | 화폐 금액 | |
numeric [ ( p , s ) ] | decimal [ ( p , s ) ] | 정확한 선택 가능한 높은 정밀도 |
path | 평면의 기하학적 경로 | |
point | 평면의 기하학 점 | |
polygon | 평면의 닫힌 기하학적 경로 | |
real | float4 | 단정 밀도 부동 소수점 (4 바이트) |
smallint | int2 | 2 바이트 부호있는 정수 |
serial | serial4 | 자동 증분 4 바이트 정수 |
text | 가변 길이 문자열 | |
time [ ( p ) ] [ without time zone ] | 시간 (시간대 없음) | |
time [ ( p ) ] with time zone | timetz | 시간대가 있는 시간 |
timestamp [ ( p ) ] [ without time zone ] | 날짜 및 시간 (시간대 없음) | |
timestamp [ ( p ) ] with time zone | timestamptz | 시간대있는 날짜와 시간 |
tsquery | 텍스트 검색 문의 | |
tsvector | 텍스트 검색 문서 | |
txid_snapshot | 사용자 수준의 트랜잭션 ID 스냅샷 | |
uuid | 범용 고유 식별자 | |
xml | XML 데이터 |
몇가지 특이한 자료형을 살펴보겠다.
날짜/시간 데이터타입
설명보다 결과를 보는것이 이해가 쉽다. timestamp, date, time 타입의 결과이다.
(PostgreSQL 은 “::자료형” 과 같은 명시로 자료형을 지정할 수 있다.)
select now() ::timestamp as t;
t |
-------------------|
2020-06-20 12:52:43|
select now() ::date as t;
t |
----------|
2020-06-20|
select now() ::time as t;
t |
--------|
12:53:05|
interval 타입은 year, month, day, hour, minute, second 등의 단위와 결합하여 날짜/시간 연산이 가능하다.
날짜연산은 쿼리시 단골로 사용하는 기능이므로, 익혀 두도록 하자.
+,- 연산도 가능하다.
select now() ::timestamp as date1
, now() + interval '3 day' as date2
;
----------------------------------------
date1 |date2 |
-------------------|-------------------|
2020-06-20 13:04:15|2020-06-23 13:04:15|
----------------------------------------
select now() + interval '3 d'
- now() as interval
;
---------
interval|
--------|
3 days|
---------
문자형 데이터타입
여느 데이터베이스와 유사하다. char, varchar, text 등의 자료형을 사용하면 된다.
char, varchar는 문자의 크기를 미리 지정해주어야 한다. 고정길이는 char, 가변길이는 varchar 라는것은 기본적으로 알고 있으리라 생각한다. char(10) , varchar(10) 과 같이 사용한다.
허나 PG에서 char, varchar를 사용할 때는 주의할 점이 있다.
char(10) 에서의 "10" 은 10 byte 가 아닌 10 length 이라는점이다. 즉, 10자리의 한글이 들어간다.
create table test_table ( col1 varchar(10) );
insert into test_table (col1) values ('가나다라마바사아자차');
select * from test_table;
col1 |
----------|
가나다라마바사아자차|
처음에는 매우 어색하나, 적응하고 나면 이보다 편리한 DB는 없다. 데이터 입력 프로그램을 만들 시 한글 2type를 전혀 고려하지 않고 length로만 오류검증을 하면 되니말이다.
숫자형 데이터타입
다양한 숫자형 데이터타입을 지원하나 실제 사용해 보면 int, numeric 을 벗어나 사용해본 적은 없는것 같다.
상황에 맞는 데이터타입을 선택하면 된다.
numeric 형식은 최대 자리수와 수수자리수를 지정하여 사용한다. 혀용 범위가 크고 계산을 정확히 수행하는 자료형이나 다른 타입에 비해 느리다고 한다.(체감X). 금액계산 시 주로 사용한다.
ex) numeric(10,2) = 99999999.99
시리얼 타입
smallserial, serial, bigserial 등의 타입이 있다.
이는 auto_increment 와 유사하게 동작한다.
아래와 같이 사용한다. serial 타입은 시퀀스 생성기에서 자동으로 시퀀스가 생성된다.
create table test_table {
auto_key serial
};
기타 특이한 타입
box, line, circle 등의 도형타입
신기한 마음에 테스트 해 본적은 있으나 활용해본 적은 없다.
(x1,y1,x2,y2) 등 도형을 완성할 수 있는 포지션데이터이다.
업무에 따라 효과적으로 사용하는 사람도있을지도...
byte, bytea :
바이너리 데이터를 저장한다. 이미지 스트림 혹은 파일을 저장 가능하다.
data가 저장되는 구조가 특이하다. 차후 포스팅에서 상세히 다루도록 하겠다.
XML, JSON
XML과 JSON은 특집 포스팅으로 한번 다뤄야 할 필요가 있다.
데이터구조체를 매우 효율적으로 보관하고. 구조체 내부의 데이터를 가공 조회할수 있는 방법론을 제공한다.
JSON 내부의 KEY:VALUE값을 조회해 올 수 있으며 KEY를 인덱스 설정하는것도 가능하다.
9버전부터 JSON을 허용했으나 9버전은 관련 함수를 제공하지 않아 TEXT로 저장하는것과 다를 바가 없었다. 10버전부터 JSON 관련 함수들을 사용할 수 있다.
ARRAY[ ]
array는 PostgreSQL에서 내가 생각하는 가장 강력한 기능중 하나로 꼽고싶다.
다음 포스팅은 array형에 대해 상세히 기록해 보기로 한다
'PostgreSQL' 카테고리의 다른 글
[PostgreSQL] ARRAY 데이터 (배열 필드 생성 및 입/출력) :: any() , all() (0) | 2020.06.23 |
---|---|
PostgreSQL 쿼리브라우저 [ pgAdmin3 / pgAdmin4 / EMS Sql Manager / DBeaver ] (0) | 2020.06.19 |
PostgreSQL postgresql.conf 파일 설정하기 (0) | 2020.06.17 |
PostgreSQL pg_hba.conf 설정하기 (0) | 2020.06.15 |
Window에 PostgreSQL 설치 (2) | 2020.06.14 |
댓글