postgreSQL
오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)
정수, 문자열, 날짜, 타임스탬프 및 바이너리 객체를 포함한 광범위한 데이터 유형을 지원합니다. PostgreSQL에는 사용자 정의 함수 및 저장 프로시저에 대한 지원도 포함되어 있습니다. PostgreSQL은 웹 애플리케이션에 널리 사용되며 확장성 덕분에 엔터프라이즈 애플리케이션에 적합합니다.
PostgreSQL은 복잡한 대량의 데이터 작업을 수행하는 데 적합한 솔루션으로 인식되고 있습니다. 이유는 PostgreSQL이 특수한 데이터베이스 상황 처리에 더 우수하기 때문입니다. PostgreSQL은 다른 데이터베이스 관리 시스템들보다 기능이 더 많습니다. 또한, 카탈로그 기반 작업이므로 확장 가능합니다. 즉, 테이블과 열에 대한 정보를 단순히 저장만 하지 않고 사용자가 데이터 형식, 인덱스 형식, 함수형 언어를 정의할 수 있습니다.
오픈 소스
PostgreSQL은 무료이며 오픈 소스 객체 관계형 데이터베이스 관리 시스템(ORDBMS)입니다. RDBMS가 아닌 ORDBMS로서 PostgreSQL은 객체 지향적 기능과 관계형 데이터베이스 기능을 모두 허용합니다.
맞춤 구성 가능
DBMS가 요구 사항에 부합하도록 플러그인을 개발함으로써 PostgreSQL을 맞춤 구성할 수 있습니다. 또한 PostgreSQL을 사용하면 C/C++, Java 등 다른 프로그래밍 언어로 만들어진 사용자 지정 기능도 통합할 수 있습니다.
높은 업데이트 빈도
가장 최근에 이루어진 PostgreSQL 업데이트는 2022년 11월 10일에 릴리스된 버전 15.1입니다.
자유로운 오픈 소스 라이센스
PostgreSQL에는 DBMS를 원하는 대로 자유롭게 사용, 수정, 배포할 수 있는 오픈 소스 라이센스가 있습니다.
MVCC 기능
PostgreSQL은 다중 버전 동시성 제어(MVCC) 기능을 구현한 첫 DBMS입니다.
PostgresSQL의 단점
UPDATE 쿼리에 약하다
PostgresSQL은 MarinaDB나 MySQL에 비해 업데이트가 굉장이 불안정한 문제를 가지고 있습니다. 이 문제는 UPDATE를 반복적으로 수행해야하는 응용서비스에는 많은 제약을 가져옮니다.
메모리 성능이 떨어진다.
모든 새로운 클라이언트 연결에 대해 PostgresSQL은 새로운 프로세스 형식으로 일으킵니다. 각각의 새로운 프로세스에 메모리(약 10MB)가 할당되므로 많은 연결이 있는 경우 메모리가 빠르게 증가합니다. 따라서 읽기가 많은 간단한 작업의 경우 PostgreSQL은 일반적으로 MySQL과 같은 다른 RDBMS보다 성능이 떨어집니다.
PostgreSQL 과 MySQL 비교
- PostgreSQL 은 테이블 상속, 함수 오버로딩 등의 기능을 갖춘 객체 관계형 데이터베이스 (ORDMBS)인 반면, MySQL 은 순수 관계형 데이터베이스 (RDBMS)입니다.
- PostgreSQL 은복잡한 쿼리와 대규모 데이터베이스를 다룰 수 있는 기능이 풍부한 데이터베이스입니다.
- MySQL 은 설치와 관리가 비교적 쉽고, 빠르고, 신뢰할 수 있고, 쉽게 파악할 수 있는 간단한 데이터베이스입니다.
대부분의 개발자는 MySQL의 경우 웹사이트와 온라인 트랜잭션에 적합하고 PostgreSQL은 복잡한 대규모 분석 프로세스에 적합하다고 이야기할 것입니다. 또한, PostgreSQL은 까다로운 데이터베이스 상황을 처리하는 데 도움이 되는 "많은 훌륭한 기능"(예: 확장성, 네이티브 NoSQL 기능)이 있다는 점도 언급할 것입니다. 마지막으로, MySQL은 기능이 많지 않기 때문에 "속도와 안정성"에 중점을 둘 수 있다고 말할 것입니다.
대부분이 맞는 말입니다. 새 릴리스가 출시될 때마다 MySQL과 PostgreSQL의 제품이 비슷해지고 있지만 (아래 표 참조), 두 데이터베이스 시스템은 서로 다른 특징을 갖고 있으므로 특정 사용 사례의 경우 더 나은 선택지가 존재할 수 있습니다.
기능 비교 | PostgreSQL 10 | MySQL 8 |
공통 테이블 식 (CTE) | 예 | 예 (새로 추가됨) |
선언적 파티셔닝 | 예 (새로 추가됨) | 예 |
전체 텍스트 검색 | 예 | 예 |
지리 정보 시스템 (GIS) / 공간 참조 시스템 (SRS) | 예 | 예 (업그레이드됨) |
JSON | 예 | 예 (업그레이드됨) |
논리 복제 | 예 (새로 추가됨) | 예 |
반 동기 복제 | 예 (새로 추가됨) | 예 |
윈도우 함수 | 예 | 예 (새로 추가됨) |
요소 | PostgreSQL | MySQL |
아키텍처 | 객체 관계형; 멀티 프로세스 | 관계형; 단일 프로세스 |
지원하는 데이터 타입 |
숫자 (Numeric)
날짜/시간 (Date/time)
문자열 (Character)
JSON
부울 (Boolean)
열거형 (Enumerated)
XML
기하 (Geometric)
배열 (Arrays)
범위 (Ranges)
네트워크 주소 (Network address)
HSTOREComposite
|
숫자 (Numeric)
날짜/시간 (Date/time)
문자열 (Character)
JSON
공간 (Spatial)
|
지원하는 인덱스 |
B-tree
Hash
GiST
SP-GiST
GIN
BRIN
|
B-tree
Hash
R-tree
역 인덱스 (Inverted indexes)
|
보안 | 많은 양의 읽기 및 쓰기를 잘 처리합니다. | 많은 양의 읽기를 잘 처리합니다. |
성능 |
액세스 컨트롤
복수의 암호화 옵션
|
액세스 컨트롤
암호화 옵션
|
테크니컬 서포트 |
커뮤니티 서포트
사설 외부업체를 통한 유상 서포트가 있음
|
커뮤니티 서포트
사설 외부업체를 통한 유상 서포트가 있음
|
개발자가 MySQL을 선택하는 이유
MySQL의 가장 중요한 장점은 다음과 같습니다.
고도의 유연성 및 확장성: MySQL을 사용하면 스토리지 엔진에 대한 선택의 폭이 커집니다. 따라서 다양한 테이블 유형의 데이터를 유연하게 통합할 수 있습니다.
속도 및 안정성에 집중: MySQL은 특정 SQL 기능을 포함하지 않음으로써 속도와 안전성에 지속적으로 우선순위를 둡니다. MySQL의 속도는 고도의 동시 읽기 전용 기능에서 특히 두드러집니다. 이러한 이유로 특정 비즈니스 인텔리전스용으로는 탁월한 선택입니다. 그렇지만 부하가 많은 상태에서 복잡한 쿼리를 대량으로 실행해야 한다면 PostgreSQL이 더 나은 선택이 될 수 있습니다.
서버 최적화를 위한 옵션: MySQL은 sort_buffer_size, read_buffer_size, max_allowed_packet 등 변수를 조정하여 MySQL 서버를 수정 및 최적화하는 옵션을 많이 제공합니다.
사용의 용이성 및 대중성: MySQL이 널리 사용된다는 것은 광범위한 MySQL 경험이 있는 데이터베이스 관리자를 쉽게 찾을 수 있다는 것을 의미합니다. 사용자들에 따르면, MySQL이 설치가 용이하고 다른 DBMS 솔루션보다 미세 조정의 필요성이 크지 않습니다. 이 튜토리얼에서는 초보자가 처음으로 MySQL 데이터베이스를 설치하는 것이 얼마나 쉬운지를 보여 줍니다. 또한, 다양한 프론트엔드(예: Adminer, MySQL Workbench, HeidiSQL, dbForge Studio)가 보다 사용자 친화적인 경험을 제공하는 그래픽 인터페이스를 MySQL에 추가합니다.
클라우드 지원 DBMS: MySQL은 클라우드를 지원합니다. 여러 클라우드 플랫폼에서 MySQL 데이터베이스를 유료로 설치하고 유지 관리해주는 MySQL 기능을 제공합니다.
InnoDB 엔진에서 다중 버전 동시성 제어(MVCC) 및 ACID 규정 준수 제공: 현재 MySQL 버전의 기본 엔진은 InnoDB으로, MVCC와 ACID 규정 준수가 추가되었습니다. 그러나 MySQL의 InnoDB는 MyISAM 테이블 형식 때문에 테이블 오염 관련 문제가 계속해서 발생할 수 있습니다. 그리고 다른 엔진을 선택하면 MVCC와 ACID 규정을 준수하지 못하는 결과가 초래될 수 있습니다.
개발자가 PostgreSQL을 선택하는 이유
PostgreSQL의 가장 중요한 장점은 다음과 같습니다. 이미 파악했을 수 있겠지만 PostgreSQL에 기술적 지식이 좀 더 요구되는 이유는 다음과 같습니다.
단순히 RDBMS가 아닌 ORDBMS: PostgreSQL은 객체 관계형 프로그래밍 언어(ORDBMS)로서 객체 지향 프로그래밍과 관계 지향/절차 지향 프로그래밍 사이를 연결하는 역할을 합니다(C++와 유사). 따라서 객체 및 테이블 상속을 정의할 수 있으므로 데이터 구조가 더 복잡해집니다. ORDBMS는 엄격한 관계형 모델에 맞지 않는 데이터를 처리할 때 탁월합니다.
복잡한 쿼리에 탁월: 유효성 검사가 필요한 데이터를 사용하면서 복잡한 읽기-쓰기 작업을 수행해야 하는 경우 PostgreSQL이 탁월한 선택입니다. 그러나 ORDBMS는 읽기 전용 작업을 처리할 때 속도가 느려질 수 있습니다.
NoSQL 및 다양한 데이터 형식 지원: NoSQL 기능을 고려하는 경우 PostgreSQL을 많이 선택합니다. PostgreSQL은 JSON, hstore, XML 등 매우 다양한 데이터 형식을 기본적으로 지원합니다. 사용자는 본래의 데이터 형식을 정의하는 것은 물론, 사용자 지정 함수도 설정할 수 있습니다.
초대형 데이터베이스 관리용으로 설계: PostgreSQL은 데이터베이스의 크기에 제한을 두지 않습니다. Adjust.com의 데이터베이스 관리자에 따르면, 자신의 회사에서는 PostgreSQL을 사용하여 "약 4PB[페타바이트]의 데이터"를 관리하고 있습니다. 4페타바이트는 4,000테라바이트입니다. 해당 관리자는 "회사의 환경에서 초당 10만~25만 개의 요청을 처리(이후 기록)한다"라고 말합니다. 정말로 엄청난 양이 아닐 수 없네요!
다중 버전 동시성 제어(MVCC): MVCC는 기업이 PostgreSQL을 선택하는 가장 중요한 이유 중 하나입니다. MVCC를 통해 데이터를 읽는 사람과 작성하는 사람이 서로 통신하여 PostgreSQL 데이터베이스를 동시에 관리할 수 있습니다. 따라서 데이터와 통신해야 할 때마다 읽기-쓰기 잠금을 할 필요가 없으므로 효율성이 향상합니다. MVCC는 이것을 "스냅샷 격리"(Oracle에서 지칭하는 방법)를 통해 구현합니다. 스냅샷은 특정 순간의 데이터 상태를 나타냅니다.
동시성 제어란?
다수의 사용자가 동시에 DBMS 트랜잭선을 일으켜 상호간섭이 발생하는 사항에서 Database를 보호하는 통제방법을 말합니다. 동시성의 허용은 DBMS의 일관성에 큰 위해를 가하기 때문에 이에 대한 처리는 매우 중요합니다.
다중버번 동시시성(MVCC) 제어란?
동시성 제어에 한 방법으로 데이터에 접근하는 사용자는 갱신/변경된 데이터를 다른 그 이전 데이터와 버전을 달리해 관리하고, 이를 기반으로 일관성을 유지하는 방법입니다. PostgresSQL은 이 방식을 지원합니다. 일반적인 RDBMS 보다 매우 빠르게 작동하는 장점이 있습니다. 단점은 사용하지 않는 데이터가 계속 쌓이므로 주기적으로 데이터를 정리하는 것이 요구된다는 점입니다. 물로 PostgresSQL은 Autovaccume을 통해 이를 해소 할 수 있지만, 이 기능도 완벽하게 이 부분을 처리해 내지는 못합니다.
ACID 준수: PostgreSQL은 데이터 오염을 방지하고 트랜잭션 수준에서 데이터 무결성을 보존합니다.
원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장
(원자성 - Atomicity) 트랜잭션의 작업 내용이 데이터베이스에 모두 반영되거나, 아예 반영되지 않아야 합니다. 즉, 작업 단위를 일부분만 실행하지 않는다는 것을 의미합니다.
(일관성 - Consistency) 트랜잭션이 성공적으로 완료되면 일관적인 DB상태(Datatype이 변하지 않는것 등의 상태 변화가 일어나지 않는것)를 유지해야 합니다.
(격리성 - Isolation) 하나의 트랜잭션 작업이 수행 시 다른 트랜잭션 작업이 중간에 수행될 수 없습니다. 즉, 트랜잭션 작업 사이의 간섭이 있어선 안되고, 서로 간섭할 수 없습니다.
(지속성 - Durability) 트랜잭션이 성공적으로 완료되면 수행된 트랜잭션은 영원히 반영이 됩니다. commit을 통하여 트랜잭션 작업 내용을 완료할 수 있습니다.
MySQL과 PostgreSQL 중 더욱 빠른 시스템은 무엇인가요?
MySQL과 PostgreSQL은 모두 현재 제공되고 있는 DBMS 중 가장 빠른 시스템으로 잘 알려져 있습니다. 그러나 둘 중 어느 것이 더 빠른가에 대한 대답은 명확하지 않습니다. 사실 속력 테스트에서는 상반되는 결과가 도출됩니다. 예를 들어 Windows Skills에서는 MySQL이 속도가 더 빠르다고 하고 Benchw는 PostgreSQL이 더 빠르다고 합니다. 결국 속도는 데이터베이스를 사용하는 방식에 따라 달라집니다. PostgreSQL은 대량의 데이터 집합, 복잡한 쿼리, 읽기-쓰기 작업을 처리할 때 더 빠른 것으로 알려져 있습니다. 그에 반해 MySQL은 읽기 전용 명령을 사용해 더 빠르다고 알려져 있습니다.
필터링 조회 (WHERE 절)
조건 연산자
연산자 설명
= | 같음 |
> | ~보다 큰 |
< | ~보다 작은 |
>= | ~보다 크거나 같은 |
<= | ~보다 작거나 같은 |
<>,!= | ~가 아닌 |
AND | 그리고 |
OR | 또는 |
결과의 제한 (LIMIT 절)
출력하는 행의 수를 지정한다
SELECT * FROM TABLE_NAME LIMIT N
출력하는 행의 범위를 지정한다.
SELECT * FROM TABLE_NAME LIMIT N OFFSET M
연관된 글 :
참고:
[PostgreSQL] numeric와 integer차이점
PostgreSQL | 데이터 형식(Data type) | 숫자 형식(integer, decimal, double precision 등)
[Postgresql] value too long for type character varying 이슈 해결 방법
[PostgreSQL] Temporary 테이블 만들기
[ PostgreSql ] 서로 다른 곳의 DB dblink로 연결하기
[PostgreSQl] 타입 변환 (PostgreSQL CAST To Convert)
[PostgresSQL 이야기 1화] PostgresSQL 특징 및 장단점 소개
블로그 | 포스트그레SQL이 ‘관계형 DB’를 집어삼키고 있다
'개발 > DB' 카테고리의 다른 글
DML/DDL/DCL (0) | 2024.06.06 |
---|---|
[PROCEDURE] 프로시저 (0) | 2023.07.10 |
[MYSQL/SQL] HEX , UNHEX 16진수 데이터 (0) | 2023.04.29 |
[DB] 프로시저(Procedure) (0) | 2023.04.27 |
[DB] DB 암호화 기술 (0) | 2023.04.26 |