본문 바로가기
통계 & 데이터분석/SQL

PostgreSQL 데이터 타입과 예시

by minitistics 2024. 10. 11.

1. Postgres 숫자 

PostgreSQL은 정수, 부동 소수점 숫자, 소수점, 일련 번호를 포함하되 이에 국한되지 않는 숫자 데이터를 저장하기 위한 여러 데이터 유형을 제공합니다.

Name Storage Size Description Range

smallint 2 bytes small-range integer -32,768 to +32,767
integer 4 bytes typical choice for integer -2,147,483,648 to +2,147,483,647
bigint 8 bytes large-range integer -9,223,372,036,854,775,808 to +9,223,372,036,854,775,807
decimal variable user-specified precision, exact up to 131,072 digits before the decimal point; up to 16,383 digits after the decimal point
numeric variable user-specified precision, exact up to 131,072 digits before the decimal point; up to 16,383 digits after the decimal point
real 4 bytes variable-precision, inexact 6 decimal digits precision
double precision 8 bytes variable-precision, inexact 15 decimal digits precision
smallserial 2 bytes small autoincrementing integer 1 to 32,767
serial 4 bytes autoincrementing integer 1 to 2,147,483,647
bigserial 8 bytes large autoincrementing integer 1 to 9,223,372,036,854,775,807

 

1-1. 정수(Integer)

가장 일반적으로 사용되는 정수 종류는 다음과 같습니다.

  1. SMALLINT: -32,768~+32,767 범위의 2바이트 부호 있는 정수입니다.
  2. INTEGER: -2,147,483,648~+2,147,483,647 범위의 4바이트 부호 있는 정수입니다.
  3. BIGINT: -9,223,372,036,854,775,808~+9,223,372,036,854,775,807 범위의 8바이트 부호 있는 정수입니다.

다음은 INTEGER 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE employees (
  id INTEGER PRIMARY KEY,
  name TEXT,
  age INTEGER,
  salary NUMERIC(10, 2)
);

 

 

1-2. 소수점(Floating-point) 

PostgreSQL은 FLOAT와 DOUBLE PRECISION이라는 두 가지 소수점 데이터 타입을 제공합니다. 이러한 유형은 소수 부분이 있는 숫자를 저장하는 데 사용됩니다. FLOAT는 4바이트 소수점 숫자이고 DOUBLE PRECISION은 8바이트 소수점 숫자입니다. 다음은 DOUBLE PRECISION 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name TEXT,
  price DOUBLE PRECISION
);

 

1-3. 10진수(Decimal) 

10진수 데이터 유형은 NUMERIC과 DECIMAL의 두 가지가 있습니다. 이러한 유형은 소수점 앞뒤에 고정된 자릿수의 숫자를 저장하는 데 사용됩니다. 두 유형의 차이점은 DECIMAL이 NUMERIC의 별칭이지만 기본 정밀도와 스케일 값이 다르다는 것입니다. 다음은 NUMERIC 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  customer TEXT,
  amount NUMERIC(10, 2)
);

 

1-4. Serial 

Serial은 자동 증가 정수 열을 만드는 약어 표기법입니다. SERIAL 데이터 유형으로 열을 만들면 PostgreSQL은 자동으로 시퀀스 객체를 만들어 열의 다음 값을 생성합니다. 다음은 SERIAL 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  username TEXT,
  password TEXT
);

 

** 예시

 

금융 회사가 계좌 번호, 잔액, 거래 내역을 포함한 고객 계좌 정보를 저장하기 위한 데이터베이스를 구축하고 있습니다. 이 데이터베이스는 직원이 고객 계좌를 보고 관리하는 데 사용되며, 자동화된 시스템에서는 계좌 거래를 수행하는 데 사용됩니다. 이 데이터를 저장하기 위해 회사는 다음 열이 있는 "accounts"라는 테이블을 만듭니다.

CREATE TABLE accounts (
  account_number INTEGER PRIMARY KEY,
  balance NUMERIC(10, 2),
  last_transaction TIMESTAMP
);
  • 이 예에서 account_number 열은 INTEGER로 정의되어 -2,147,483,648과 +2,147,483,647 사이의 정수를 저장할 수 있습니다. 이는 고유한 계좌 번호를 저장하기에 충분합니다.
  • balance 열은 NUMERIC(10, 2)로 정의되어 최대 10자리의 숫자를 저장할 수 있으며, 그 중 2자리는 소수점 뒤에 있습니다. 이를 통해 센트의 분수를 포함할 수 있는 계좌 잔액을 정확하게 추적할 수 있습니다.
  • 마지막으로 last_transaction 열은 TIMESTAMP로 정의되어 계좌에서 가장 최근 거래의 날짜와 시간을 저장할 수 있습니다. 이 데이터 유형은 거래 내역을 기준으로 계좌를 정렬하고 필터링하는 데 사용할 수 있으며 사기 감지를 위해 계좌 활동을 모니터링하는 데 사용할 수 있습니다.

데이터베이스 스키마에서 적절한 숫자 데이터 유형을 사용하면 금융 회사는 계좌 정보가 정확하고 효율적으로 저장, 검색 및 처리되도록 할 수 있습니다.

 

2. Postgres 문자

문자열을 처리하기 위한 여러 데이터 유형이 있으며, 이는 텍스트 데이터를 표현하는 데 사용됩니다. PostgreSQL에서 가장 일반적으로 사용되는 세 가지 문자 데이터 유형은 char, varchar 및 text 데이터 유형입니다.

 

2-1. CHAR

CHAR 데이터 유형은 고정 길이의 문자열을 저장합니다. CHAR 데이터 유형으로 열을 정의할 때 문자열의 길이를 지정해야 합니다. 예를 들어, CHAR(20) 유형의 "last_name"이라는 열이 있는 테이블을 만들려면 다음과 같이 합니다.

CREATE TABLE employees (
  employee_id serial PRIMARY KEY,
  last_name char(20),
  first_name varchar(20),
  hire_date date
);

 

CHAR(n)은 공백이 채워진 고정 길이의 문자가 있는 데이터(문자열)에 사용됩니다. 문자열의 길이가 "n"의 값보다 작은 경우 나머지 공백은 자동으로 채워집니다. 마찬가지로 "n"의 값보다 긴 길이의 문자열의 경우 PostgreSQL은 오류를 발생시킵니다.

 

2-2. VARCHAR 

VARCHAR 데이터 유형은 가변 길이 문자열을 저장합니다. varchar 데이터 유형으로 열을 정의할 때는 문자열의 최대 길이를 지정해야 합니다. CHAR(n)과 유사하게 "n" 길이의 데이터를 저장할 수 있지만 CHAR(n)과 달리 데이터 길이가 "n" 값보다 작은 경우 패딩이 수행되지 않습니다.

CREATE TABLE customers (
  customer_id serial PRIMARY KEY,
  first_name varchar(20),
  last_name varchar(20),
  email varchar(50),
  phone varchar(15)
);

 

2-3. TEXT

텍스트 데이터 유형은 지정된 길이 제한 없이 긴 텍스트 문자열을 저장합니다. 예를 들어, 텍스트 유형의 "description"이라는 열이 있는 테이블을 만들려면:

CREATE TABLE products (
  product_id serial PRIMARY KEY,
  product_name varchar(50),
  description text,
  price decimal(8,2)
);

 

 

3. Postgres 날짜/시간 

PostgreSQL은 날짜 및 시간 데이터 작업을 위한 여러 데이터 유형을 제공합니다. 이러한 데이터 유형에는 날짜, 시간, 타임스탬프 및 간격이 포함됩니다.

 

3-1. 날짜

날짜 데이터 유형은 YYYY-MM-DD 형식으로 날짜를 저장하는 데 사용됩니다. 예를 들어, 날짜 유형의 "order_date"라는 열이 있는 테이블을 만들면 다음과 같습니다.

CREATE TABLE orders (
  order_id serial PRIMARY KEY,
  order_date date,
  customer_id int,
  product_id int,
  quantity int,
  total decimal(8,2)
);

 

3-2. 시간

시간 데이터 유형은 HH:MI:SS 형식으로 하루 중 시간을 저장합니다. 예를 들어, 시간 유형의 "checkin_time"이라는 열이 있는 테이블을 만들려면:

CREATE TABLE visitors (
  visitor_id serial PRIMARY KEY,
  first_name varchar(20),
  last_name varchar(20),
  checkin_time time,
  checkout_time time
);

 

3-3. 타임스탬프

타임스탬프 데이터 유형은 YYYY-MM-DD HH:MI:SS 형식으로 날짜와 시간 정보를 모두 저장합니다. 예를 들어, 타임스탬프 유형의 "created_at"이라는 열이 있는 테이블을 만들려면 다음과 같이 합니다.

plaintext
CREATE TABLE comments (
  comment_id serial PRIMARY KEY,
  post_id int,
  user_id int,
  comment_text text,
  created_at timestamp
);

 

 

3-4. Interval

Interval(간격) 데이터 유형은 년, 월, 일, 시, 분, 초와 같은 다양한 형식으로 기간을 저장합니다. 예를 들어, 간격 유형의 "duration"이라는 열이 있는 테이블을 만들려면:

CREATE TABLE tasks (
  task_id serial PRIMARY KEY,
  task_name varchar(50),
  start_time timestamp,
  end_time timestamp,
  duration interval
);

 

** 예시

사용자가 의료 서비스 제공자와의 약속을 예약할 수 있는 웹사이트를 구축한다고 가정해 보겠습니다. 약속 날짜와 시간을 포함한 약속 정보를 저장할 데이터베이스를 만들어야 합니다. 이 경우, 날짜 및 시간 데이터 유형을 사용하여 약속 날짜와 시간을 저장할 수 있습니다. 이 정보를 저장할 테이블을 만드는 방법의 예는 다음과 같습니다.

 

CREATE TABLE appointments (
  appointment_id serial PRIMARY KEY,
  patient_name varchar(50),
  doctor_name varchar(50),
  appointment_date date,
  appointment_time time
);

 

이 예에서 "appointments" 테이블에는 약속 ID, 환자 이름, 의사 이름, 약속 날짜 및 약속 시간에 대한 열이 있습니다. "appointment_date" 열은 날짜 유형으로 정의되고 "appointment_time" 열은 시간 유형으로 정의됩니다. 환자가 약속을 예약하면 각 열에 대한 적절한 값으로 "appointments" 테이블에 새 레코드를 삽입할 수 있습니다. 예를 들어:

 

INSERT INTO appointments (patient_name, doctor_name, appointment_date, appointment_time)
VALUES ('George Smith', 'Dr. Hamilton', '2024-10-10', '15:00:00');

 

이렇게 하면 환자 이름 "George Smith", 의사 이름 "Dr. Hamilton", 예약 날짜 및 시간이 2024년 10월 10일 오후 3시로 설정된 새 예약 기록이 생성됩니다.

 

날짜 및 시간 데이터 유형은 데이터베이스에서 날짜 및 시간 정보를 저장하고 조작하는 강력하고 유연한 방법을 제공합니다. 의료 예약 시스템이나 다른 산업의 일정 관리 애플리케이션을 구축하든 이러한 데이터 유형은 데이터베이스에서 시간 관련 데이터를 관리하는 데 필수적입니다.

 

4. Postgres Boolean 

 

이것은 TRUE 또는 FALSE라는 두 가지 값만 가능한 간단한 데이터 유형입니다. 플래그의 상태나 논리 연산의 결과를 나타내는 것과 같이 두 가지 상태만 필요한 많은 상황에서 유용합니다. 다음은 Boolean 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE orders (
  order_id SERIAL PRIMARY KEY,
  customer_name VARCHAR(50) NOT NULL,
  order_date DATE NOT NULL,
  shipped BOOLEAN DEFAULT FALSE
);

 

이 예에서 "shipped" 열은 BOOLEAN 유형이고 기본값은 FALSE입니다. Boolean 데이터 유형의 사용 사례는 주문 상태를 추적하는 것입니다. 주문이 생성되면 "shipped" 열이 FALSE로 설정됩니다. 주문이 배송되면 열을 TRUE로 업데이트할 수 있습니다.

 

5. Postgres 배열(Array) 

데이터 유형 배열을 사용하면 동일한 데이터 유형의 여러 값을 단일 열에 저장할 수 있습니다. 이는 전화번호나 이메일 주소 목록과 같이 값 목록을 저장해야 하는 상황에서 유용할 수 있습니다. 다음은 배열 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE users (
  user_id SERIAL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  emails TEXT[] NOT NULL
);

 

이 예에서 "emails" 열은 TEXT[] 유형(텍스트 값 배열)입니다. 배열 데이터 유형의 실용적인 사용 사례는 사용자의 이메일 주소 목록을 저장하는 것입니다. 각 이메일 주소에 대해 별도의 행을 만드는 대신 모든 이메일 주소를 단일 열에 배열로 저장할 수 있습니다.

6. Postgres 복합(Composite) 

복합 데이터 유형을 사용하면 여러 데이터 유형을 단일 데이터 유형으로 결합하여 고유한 데이터 유형을 정의할 수 있습니다. 이는 단일 열에 여러 관련 값을 저장해야 할 때 유용합니다. 다음은 복합 데이터 유형을 만드는 예입니다.

CREATE TYPE address AS (
  street VARCHAR(50),
  city VARCHAR(50),
  state CHAR(2),
  zip VARCHAR(10)
);

 

이 예에서 우리는 거리, 도시, 주, 우편번호의 네 가지 필드로 구성된 "주소"라는 새로운 데이터 유형을 정의했습니다. 그런 다음 테이블 정의에서 이 데이터 유형을 사용할 수 있습니다.

CREATE TABLE customers (
  customer_id SERIAL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  address address
);

 

이 예에서 "주소" 열은 "주소" 유형입니다(사용자 지정 복합 데이터 유형). 복합 데이터 유형의 사용 사례는 고객의 주소를 별도의 열로 나누는 대신 단일 값으로 저장하는 것입니다.

7. 특수 Postgres 데이터 타입

PostgreSQL은 UUID, JSON, XML, Hstore와 같이 다른 데이터베이스에서 일반적으로 찾을 수 없는 여러 가지 특수 데이터 유형을 제공합니다.

 

7-1. UUID 

UUID(Universally Unique Identifier) 데이터 유형을 사용하면 고유 식별자를 128비트 값으로 저장할 수 있습니다. 이는 테이블의 레코드에 대한 고유 식별자를 생성해야 할 때 유용할 수 있습니다. 다음은 UUID 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE users (
  user_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  name VARCHAR(50) NOT NULL
);

이 예에서 "user_id" 열은 UUID 유형이고 기본값은 uuid_generate_v4()입니다. 이는 각 새 레코드에 대해 새 UUID 값을 생성합니다.

 

7-2. JSON 

JSON 데이터 유형을 사용하면 JSON(JavaScript Object Notation) 데이터를 열에 저장할 수 있습니다. 이는 쉽게 직렬화 및 역직렬화할 수 있는 복잡한 데이터 구조를 저장해야 할 때 유용할 수 있습니다. JSON 열이 있는 테이블을 만드는 예는 다음과 같습니다.

CREATE TABLE products (
  product_id SERIAL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  attributes JSON NOT NULL
);

이 예에서 "속성" 열은 JSON 유형이며 제품에 대한 다양한 속성을 포함하는 JSON 객체를 저장합니다.

 

7-3. XML 

XML 데이터 유형을 사용하면 열에 XML(Extensible Markup Language) 데이터를 저장할 수 있습니다. 이는 데이터베이스에 XML 데이터를 저장하고 쿼리해야 할 때 유용할 수 있습니다. 다음은 XML 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE books (
  book_id SERIAL PRIMARY KEY,
  title VARCHAR(50) NOT NULL,
  content XML NOT NULL
);

XML 데이터 유형의 실용적인 사용 사례는 XML 형식으로 제공되는 책을 저장하고 검색하는 것입니다.

 

7-4.Hstore 데이터 유형

Hstore 데이터 유형을 사용하면 단일 열에 키-값 쌍을 저장할 수 있습니다. 이는 레코드에 대한 가변 개수의 속성을 저장해야 할 때 유용할 수 있습니다. 다음은 Hstore 열이 있는 테이블을 만드는 예입니다.

CREATE TABLE products (
  product_id SERIAL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  attributes HSTORE NOT NULL
);

이 예에서 "속성" 열은 Hstore 유형이며 제품의 속성을 나타내는 키-값 쌍 세트를 저장합니다. Hstore 데이터 유형의 실용적인 사용 사례는 속성이 다양한 제품 유형 간에 다른 온라인 매장의 제품 속성을 저장하는 것입니다. Hstore 열을 사용하면 각 제품 유형에 대한 관련 속성만 저장할 수 있습니다.

 

 

PostgreSQL 데이터 유형은 데이터를 저장하고 조작하는 데 다양한 옵션을 제공합니다. 적절한 데이터 유형을 선택하면 데이터 정확성, 일관성 및 효율성을 보장할 수 있습니다. PostgreSQL의 데이터 유형을 더 잘 이해하면 데이터를 가장 잘 관리하는 방법에 대한 정보에 입각한 결정을 내릴 수 있습니다.

반응형

댓글