Data Type

  • Boolean

  • Character: char, varchar, text

  • Numeric

  • Temporal: date, time, timestamp, interval

  • UUID

  • Array

  • JSON

  • hstore

  • Special Types: network address, geometric data

Boolean

  • true, false, null

  • 1, yes, y, t, true 는 true 값으로 변환된다.

  • 0, 아니요, 거짓, f 값은 거짓으로 변환된다.

  • 위와 같이 들어간 데이터에 대해서 select 하면, true, false, null 로 변환되어 표시

Character

세가지 문자 데이터 유형 제공을 제공한다.

  • char(n)

    • 공백이 추가된 고정 길이 문자

    • 열의 길이보다 짧은 문자열을 삽입하면 공백을 채움

  • varchar(n)

    • 가변 길이 문자열

    • 최대 n개의 문자를 저장

    • 저장된 문자열이 열의 길이보다 짧은 경우, 공백을 채우지 않음

  • text

    • 가변 길이 문자열

    • 이론적으로 길이 제한 없는 문자열

Numeric

두 가지 유형의 숫자를 제공한다.

  • integers

  • floating-point numbers

Integers

세 가지 종류의 정수가 있다.

  • Smallint: -32,768 ~ 32,767 범위의 2바이트 부호 있는 정수

  • Int: -2,147,483,648 ~ 2,147,483,647 범위의 4바이트 정수

  • Serial: 자동 값 생성. MySQL의 AUTO_INCREMENT

Floating-point number

부동 소수점 숫자에는 세 가지 주요 유형이 있다.

  • float(n)

    • 최대 8바이트인 부동 소수점 숫자

    • n의 값에 따라 저장되는 숫자의 정밀도가 달라질 수 있음

  • read or float8

    • 4바이트 부동소수점 수

    • 저장할 수 있는 소수점 이하의 자릿수가 상대적으로 적음

  • numeric or numeric(p,s)

    • 가변 길이의 고정 소수점 숫자를 저장

    • p는 전체 자리 수(정수부 + 소수부 포함한 총 자리수), s는 소수점 이하 자리수

    • 매우 높은 정밀도가 필요한 경우에 사용됨

    • numeric(10, 2)는 총 10자리 숫자 중 소수점 이하 2자리를 나타내며, 12345678.90과 같은 숫자 저장

Temporal(시간)

5가지의 주요 시간 데이터 유형이 있다.

  • DATE

    • 날짜만 저장, 생일, 특정 이벤트 날짜

    • YYYY-MM-DD

  • TIME

    • 시간 값만 저장, 하루 중 특정 시간, 운영 시간

    • HH:MI:SS

  • TIMESTAMP

    • 날짜와 시간 값 모두 저장

    • YYYY-MM-DD HH:MI:SS

  • TIMESTAMPTZ

    • 시간대가 있는 타임스탬프의 약자

    • YYYY-MM-DD HH:MI:SS±TZ

  • INTERVAL

    • 기간 저장

    • 1 year 2 months, 3 days 04:05:06

CREATE TABLE temporal_data (
    id SERIAL PRIMARY KEY,
    event_date DATE,               -- 날짜만 저장
    event_time TIME,               -- 하루의 시간 저장
    event_timestamp TIMESTAMP,     -- 날짜와 시간 저장
    event_timestamptz TIMESTAMPTZ, -- 타임존을 포함한 날짜와 시간 저장
    duration INTERVAL              -- 기간 저장
);

-- 데이터 삽입 예시
INSERT INTO temporal_data (
    event_date, event_time, event_timestamp, event_timestamptz, duration
) VALUES (
    '2024-05-17',               -- DATE
    '14:30:00',                 -- TIME
    '2024-05-17 14:30:00',      -- TIMESTAMP
    '2024-05-17 14:30:00+00',   -- TIMESTAMPTZ (UTC 시간)
    '1 year 2 months 3 days'    -- INTERVAL
);

Array

  • 문자열 배열, 정수 배열 등을 배열에 저장할 수 있다.

  • 요일 또는 월을 저장하는 등 일부 상황에서 유용하게 사용 가능

CREATE TABLE example_arrays (
    id SERIAL PRIMARY KEY,
    days_of_week TEXT[],       -- Array of strings
    months_of_year TEXT[],     -- Array of strings
    temperatures INTEGER[],    -- Array of integers
    timestamps TIMESTAMP[]     -- Array of timestamps
);

-- Insert sample data
INSERT INTO example_arrays (days_of_week, months_of_year, temperatures, timestamps)
VALUES (
    ARRAY['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],             -- Days of the week
    ARRAY['January', 'February', 'March', 'April', 'May'],                     -- Months of the year
    ARRAY[23, 19, 15, 18, 22],                                                 -- Temperatures
    ARRAY['2024-05-17 14:30:00', '2024-05-18 15:00:00', '2024-05-19 16:30:00'] -- Timestamps
);

-- Query the table
SELECT * FROM example_arrays;

JSON Type

  • 두 가지 JSON 데이터 유형을 제공

  • 구조가 유동적인 데이터 저장하는 경우

  • 응용 프로그램 설정이나 환경변수를 저장하는 경우(구조 간단, 자주 변경되지 않음)

  • API 요청 및 응답 데이터

  • 로그 및 이벤트 데이터

  • JSONB 데이터 유형은 다양한 속성을 인덱싱하고 검색하는데 유용 예를 들어, JSONB 데이터 유형을 사용하여 사용자 프로필 데이터를 저장하면, 각 속성을 인덱싱하여 효율적으로 검색할 수 있음

JSON

  • 처리할 때마다 리파싱이 필요한 일반 JSON데이터를 저장

JSONB

  • 처리 속도는 빠르지만, 삽입 속도는 느린 바이너리 형식의 JSON데이터 저장

  • JSONB는 인덱싱을 지원하므로 이점이 있을 수 있다.

Special data Type

기하학 및 네크워크와 관련된 특수 데이터 유형

  • box: a rectangular box

  • line: a set of points

  • point: a geometric pair of numbers

  • lseg: a line segment

  • polygon: a closed geometric

  • inet: an IP4 address

  • macaddr: a MAC address

Last updated