우디의 개발스터디

[PostgreSQL] PostgreSQL 개념 정리

by 개발자 우디

객체관계형 데이터베이스 관리 시스템

  • 미국 캘리포니아에 있는 버클리 대학 컴퓨터 과학부에서 개발한 POSTGRES, Version 4.2를 기반으로 개발
    PostgreSQL은 이 원래의 버클리 소스를 기반으로 확장된 오픈 소스이다.

 

PostgreSQL의 장점

  • 라이센스에 관한 비용 문제가 전혀 발생하지 않는다.
    지속적인 업데이트

 

PostgreSQL의 단점

  • 독창적인 자료형 및 문법으로 인해 활용성은 높아졌지만, 학습비용(시간)이 단점이다.

 

PostgreSQL 자료형

명칭
별명 설명
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 데이터

 

타 SQL와 차이점이 있는 자료형 체크

  • 날짜/시간
    (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|
  • 문자형
    (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      |
----------|
가나다라마바사아자차|
  • 시리얼 타입(Serial)
    smallserial, serial, bigserial 등의 타입이 있다.
    이는 타 SQL의 auto_increment 와 유사하게 동작한다.
    serial 타입은 시퀀스 생성기에서 자동으로 시퀀스가 생성된다.
create table test_table {

     auto_key serial

};

 

PostgreSQL 트랜잭션 처리

BEGIN;
UPDATE accounts SET balance = balance - 100.00
    WHERE name = 'Alice';
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
    WHERE name = 'Bob';
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
    WHERE name = 'Wally';
COMMIT;

여기서 조건문으로 가른 뒤 ROLLBACK 처리도 가능

 

 

 


막상 정리하려고 자료를 찾다보니 여태사용하던 타 SQL과 크게는 유의미한 차이가 없는 것 같다.

상속 관련된 개념같은것도 실무에서 사용할 일이 있을지도 모르겠고..

문법 관련된 디테일한 부분에서 차이를 발견할때마다 포스팅에 내용을 추가해야겠다.

블로그의 정보

우디의 개발스터디

개발자 우디

활동하기