PostgreSQL 기초 1

Page content

개요

  • psql shell 명령어를 간단히 배우도록 한다.
  • Database, Schema, Table를 생성하도록 한다.
  • 데이터타입에 대해 배우도록 한다.

psql Shell 명령어

명령어 설명
\q psql을 종료한다.
\l 데이터베이스를 조회한다.
\c 입력한 DB로 이동한다.
\e 외부편집기로 sql 쿼리 입력 가능
\dt 현재 DB에서 테이블을 확인할 수 있음.
  • 자주 사용하는 명령어이기 때문에 확인한다.

DB 및 Table 다루기

  • 콘솔창에서 book 이름의 DB를 생성한다.
evan=# CREATE DATABASE book;
CREATE DATABASE
  • 그 후, book에 접속한다.
evan=# \c book
You are now connected to database "book" as user "evan".
book=#
  • 이번에는 DROP DATABASE 구문을 통해 book 삭제한다.
evan=# DROP DATABASE book;
DROP DATABASE

SCHEMA 생성

postgres=# CREATE SCHEMA ann_simmons;
CREATE SCHEMA

postgres=# CREATE SCHEMA ty_beck;
CREATE SCHEMA

postgres=# CREATE SCHEMA production;
CREATE SCHEMA

Two Table 생성

  • 두개의 테이블을 생성한다.
CREATE TABLE customers ();
CREATE TABLE orders ();
  • 커밋을 항상 진행한다.
  • psql 터미널에서 \dt를 실행하여 출력값이 잘 나오는지 확인한다.
postgres=# \dt
         List of relations
 Schema |   Name    | Type  | Owner 
--------+-----------+-------+-------
 public | customers | table | evan
 public | orders    | table | evan
(2 rows)

Primary Key 생성

  • 이번에는 Primary Key 생성하는 것을 준비한다.
  • 이제 이 두개의 Table를 생성하도록 합니다.
CREATE TABLE business_type (
	id serial PRIMARY KEY,
  	description TEXT NOT NULL
);

CREATE TABLE applicant (
	id serial PRIMARY KEY,
  	name TEXT NOT NULL,
  	zip_code CHAR(5) NOT NULL,
  	business_type_id INTEGER references business_type(id)
);

CREATE TABLE users (
  id serial PRIMARY KEY,
  first_name TEXT NOT NULL,
  last_name TEXT NOT NULL,
  email TEXT NOT NULL,
  hashed_password CHAR(72) NOT NULL
);

schema.table 생성

  • temp schema를 생성한 후, temp.users table를 작성한다.
CREATE TABLE temp.users (
  id serial PRIMARY KEY,
  first_name TEXT NOT NULL,
  last_name TEXT NOT NULL,
  email TEXT NOT NULL,
  hashed_password CHAR(72) NOT NULL
);

Data Types

  • 크게 Text, NUMERIC, BOOLEAN 형태로 구성이 됩니다.
-- Create the project table
CREATE TABLE project (
	-- Primary Key
	id SERIAL PRIMARY KEY,
    -- franchise 기회
	is_franchise BOOLEAN DEFAULT FALSE,
	-- Franchise 이름
    franchise_name TEXT DEFAULT NULL,
    -- Project 시도
    project_state TEXT,
    -- Project 시군
    project_county TEXT,
    -- Project로 발생한 Job 수
    jobs_supported NUMERIC
);

다양한 Text Data Types

CREATE TABLE book (
  isbn CHAR(13) NOT NULL, 
  author_first_name VARCHAR(50) NOT NULL, 
  author_last_name VARCHAR(50) NOT NULL, 
  content TEXT NOT NULL
);
  • Text data 타입은: TEXT, VARCHAR(N), CHAR(N) 크게 3가지 형태로 구성이 된다.
  • TEXT
    • 길이를 알 수 없는 텍스트 데이터에 적합
  • VARCHAR(N)
    • N은 최대 길이가 N자인 문자열만 저장하도록 열을 제한함.
    • N보다 글자수가 큰 값이 입력이 되면 error가 발생이 됨
    • 만약 N을 지정하지 않으면 TEXT와 동일하게 됨
  • CHAR(N)
    • 정확하게 N 숫자만큼 글자만 들어가게 됨
    • isbn은 주로 출판사에서 볼 수 있는 문자열임

Numeric Data

CREATE TABLE employee (
  id SERIAL PRIMARY KEY, 
  first_name VARCHAR(10) NOT NULL, 
  last_name VARCHAR(10) NOT NULL, 
  num_sales INTEGER
)

-- Create the client table
CREATE TABLE client (
  id SERIAL PRIMARY KEY,
  name VARCHAR(50),
  site_url VARCHAR(50),
  num_employees SMALLINT,
  num_customers INTEGER
);

-- Create the campaign table
CREATE TABLE campaign (
  id SERIAL PRIMARY KEY,
  name VARCHAR(50),
  budget NUMERIC(7, 2),
  num_days SMALLINT DEFAULT 30,
  goal_amount INTEGER DEFAULT 100,
  num_applications INTEGER DEFAULT 0
);
  • Integer Types

    • SMALLINT
    • INTEGER
    • BIGINT
    • SERIAL
    • BIGSERIAL
    • DECIMAL(총자릿수, 소수점 자릿수)
  • Floating-Point Types

    • DECIMAL(NUMERIC)
    • REAL
    • DOUBLE PRECISION

BOOLEAN Data Types

  • true
  • false
  • NULL

Temporal Data types

CREATE TABLE appeal (
	id SERIAL PRIMARY KEY,
    content TEXT NOT NULL,
    received_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  	approved_on_appeal BOOLEAN DEFAULT NULL,
    reviewed DATE
);
  • TIMESTAMP

  • DATE

  • TIME

  • 아래 Table 정의하는 것에 대해 생각해보는 시간을 갖는다.

-- Create the loan table
CREATE TABLE loan (
	borrower_id INTEGER REFERENCES borrower(id),
    bank_id INTEGER REFERENCES bank(id),
    approval_date DATE NOT NULL DEFAULT CURRENT_DATE,
  	gross_approval DECIMAL(9, 2) NOT NULL,
    term_in_months SMALLINT NOT NULL,
  	revolver_status BOOLEAN NOT NULL DEFAULT FALSE,
  	initial_interest_rate DECIMAL(4, 2) NOT NULL
);

CAST 연산자

  • CAST 연산자는 형변환을 할 수 있는 가장 기본적인 방법이다.
CAST (표현식 AS 바꿀 데이터 타입) FROM TABLE;