[PostgreSQL] data type

Nam Eun-Ji·2020년 11월 27일
0
NameAliasesDescription
bigintint8signed eight-byte integer
bigserialserial8autoincrementing eight-byte integer
bit [ (n) ]fixed-length bit string
bit varying [ (n) ]varbit [ (n) ]variable-length bit string
booleanboollogical Boolean (true/false)
boxrectangular box on a plane
byteabinary data (“byte array”)
character [ (n) ]char [ (n) ]fixed-length character string
character varying [ (n) ]varchar [ (n) ]variable-length character string
cidrIPv4 or IPv6 network address
circlecircle on a plane
datecalendar date (year, month, day)
double precisionfloat8double precision floating-point number (8 bytes)
inetIPv4 or IPv6 host address
integerint, int4signed four-byte integer
interval [ fields ][ (p) ] time span
jsontextual JSON data
jsonbbinary JSON data, decomposed
lineinfinite line on a plane
lsegline segment on a plane
macaddrMAC (Media Access Control) address
macaddr8MAC (Media Access Control) address (EUI-64 format)
moneycurrency amount
numeric [ (p, s) ] decimal [ (p, s) ] exact numeric of selectable precision
pathgeometric path on a plane
pg_lsnPostgreSQL Log Sequence Number
pointgeometric point on a plane
polygonclosed geometric path on a plane
realfloat4single precision floating-point number (4 bytes)
smallintint2signed two-byte integer
smallserialserial2autoincrementing two-byte integer
serialserial4autoincrementing four-byte integer
textvariable-length character string
time [ (p) ][ without time zone ]time of day (no time zone)
time [ (p) ] with time zonetimetztime of day, including time zone
timestamp [ (p) ][ without time zone ]date and time (no time zone)
timestamp [ (p) ] with time zonetimestamptzdate and time, including time zone
tsquerytext search query
tsvectortext search document
txid_snapshotuser-level transaction ID snapshot
uuiduniversally unique identifier
xmlXML data




Numeric Types

NameStorage SizeDescriptionRange
smallint2 bytessmall-range integer-32768 to +32767
integer4 bytestypical choice for integer-2147483648 to +2147483647
bigint8 byteslarge-range integer-9223372036854775808 to +9223372036854775807
decimalvariableuser-specified precision, exactup to 131072 digits before the decimal point; up to 16383 digits after the decimal point
numericvariableuser-specified precision, exactup to 131072 digits before the decimal point; up to 16383 digits after the decimal point
real4 bytesvariable-precision, inexact6 decimal digits precision
double precision8 bytesvariable-precision, inexact15 decimal digits precision
smallserial2 bytessmall autoincrementing integer1 to 32767
serial4 bytesautoincrementing integer1 to 2147483647
bigserial8 byteslarge autoincrementing integer1 to 9223372036854775807

smallint, integer, bigint

  • 정수를 표현하기 위한 데이터 타입
  • smallint는 일반적으로 디스크 공간이 부족한 경우에 사용된다.
  • bigint는 범위가 불분명할 때 사용한다.

real, double precision, numeric

  • 부동소수점 숫자를 표현하기 위한 데이터 타입(부정확한 가변 정밀도 숫자 데이터 형식)
  • 여기서 부정확이란 값이 그대로 내부 형식으로 변환되지 않고 근사치로 저장되는 것이다.
  • 정확한 기록과 계산이 필요할 때는 대신 numeric을 사용한다.
  • numeric(p,s) : p자리 실수, s는 소수점 이하.
  • float8은 double precision의 줄임말이다.
  • 부동소수점 참고 자료 1
  • 부동소수점 참고 자료 2

smallserial, serial, bigserial

  • MySQL에서는 int와 auto_increment를 이용하지만, postgresql에서는 serial을 이용하여 자동으로 생성되게 한다.
-- mysql
"idx" int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY

-- postgresql
"idx" serial PRIMARY KEY,




Character Types

NameDescription
character varying(n), varchar(n)variable-length with limit
character(n), char(n)fixed-length, blank padded
textvariable unlimited length
  • insert할 때에는 쌍따옴표 ""가 아닌 홀따옴표 ''로 넣어야 에러가 나지 않는다.

character

  • char
  • 고정길이 character string
  • 문자열의 길이가 짧으면 공백으로 채워진다.

character varying

  • varchar
  • 가변길이 character string
  • 길이가 짧으면 공백으로 채워지지 않는다.

text

  • 최대 길이를 지정할 필요가 없는 문자열




Boolean

NameStorage SizeDescription
boolean1 bytestate of true or false
  • bool로 선언
  • T, F, NULL 3종류로만 저장된다.
  • 참으로 저장 : true, t, yes, on, 1
  • 거짓으로 저장 : false, f, no, off, 0
  • 이외의 경우에는 저장되지 않는다.




Date/Time

NameStorage SizeDescriptionLow ValueHigh ValueResolution
timestamp [ (p) ][ without time zone ]8 bytesboth date and time (no time zone)4713 BC294276 AD1 microsecond
timestamp [ (p) ] with time zone8 bytesboth date and time, with time zone4713 BC294276 AD1 microsecond
date4 bytesdate (no time of day)4713 BC5874897 AD1 day
time [ (p) ][ without time zone ]8 bytestime of day (no date)00:00:0024:00:001 microsecond
time [ (p) ] with time zone12 bytestime of day (no date), with time zone00:00:00+145924:00:00-14591 microsecond
interval [ fields ][ (p) ]16 bytestime interval-178000000 years178000000 years1 microsecond
  • date, time, timestamp(datetime), timestamppz, interval
  • Date, Time 입력은 텍스트 문자열과 같은 작은 따옴표로 묶어야 한다.
insert into tdatetime.datetime_test (
	t_date, t_time, t_timestamp, t_timestamptz
) values (now(), now(), now(), now()); 



date

  • 날짜 (year, month, day)

time

  • 시간

timestamp(datetime)

  • without time zone
  • 날짜와 시간이 모두 포함된 완전한 타임스탬프 값을 저장하는데 사용
  • 기본적으로 timestamp값은 UTC이다.

timestampz

  • with time zone

interval

  • timestamp간의 시간 간격
SELECT now(), now() - INTERVAL '1 year 3 hours 20 minutes'
AS "3 hours 20 minutes ago of last year"
now3 hours 20 minutes ago of last year
2019-02-25 17:41:202018-02-25 14:21:20

오라클에서는 UTC를 바탕으로 시간을 계산해서 진행하는 반면 postgresql에는 글로벌 타임 개념이 존재하여, 나라와 도시만 설정하면 해당 타임존의 시간이 자동으로 변환되어 출력한다.

SET TIME ZONE 'Asia/Seoul';
SET timezone ='Asia/Seoul';

format

  • format 관련 함수는 이곳에서 확인해보기.
select t_timestamp, to_char(t_timestamp, 'YYYY-mm-dd') as change_datetime from tdatetime.datetime_test;

결과 왼쪽: 원본 / 오른쪽: formatting

t_timestampchange_datetime
2020-05-01 14:57:38.3655982020-05-01




Array

  • 배열 형태로 저장할 수 있는 데이터 형식
  • 배열의 크기나 타입을 저장하는 것은 형식적인 것으로 실행시간에 영향을 주지 않는다.
  • 다차원 배열은 꼭 각 차원끼리 쌍을 이뤄야한다. 쌍을 이루지 않으면 에러를 발생한다.
  • 중괄호를 사용하거나 array라고 명시해주어야 한다.
  • 자세히보기
CREATE TABLE test_array (
    array1 integet[]
    array2 integer[3][3]
    array3 text[]
    array4 varchar(100)[]
    array4 json[]
);




JSON

  • JSON형태로 저장할 수 있는 데이터 형식
  • JSON은 들어온 그대로 값을 저장한다. 그런데 JSONB는 그대로 저장하지 않는다. 문자열 사이의 공백도 제거해주고, KEY 순서도 보장하지 않는다.
  • Json : 문자 JSON data
  • Jsonb : 이진 JSON data, decomposed
  • 자세히보기
create table test(
    t_json json,
    t_jsonb jsonb,
    t_json_array json[]
);




Geometric Types

point

  • stores a pair of coordinates that define a point

line

  • stores a set of points that map out a line

lseg

  • stores data that defines a line segment

box

  • stores data that defines a rectangle

polygon

  • stores data that defines any enclosed space
profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글