[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과 크게는 유의미한 차이가 없는 것 같다.
상속 관련된 개념같은것도 실무에서 사용할 일이 있을지도 모르겠고..
문법 관련된 디테일한 부분에서 차이를 발견할때마다 포스팅에 내용을 추가해야겠다.
블로그의 정보
우디의 개발스터디
개발자 우디