PostgreSQL RDBMS와 차별화된 10가지

ilkwon bae·2023년 4월 25일

PostgreSQL은 강력하고 기능이 풍부한 오픈 소스 관계형 데이터베이스 관리 시스템입니다. PostgreSQL을 다른 RDBMS와 차별화하는 10가지 고유한 기능은 다음과 같습니다.

  1. 사용자 정의 데이터 유형: PostgreSQL을 사용하면 사용자가 자신의 데이터 유형을 만들 수 있습니다. 이 기능을 통해 개발자는 특정 비즈니스 요구 사항을 충족하는 사용자 정의 데이터 유형을 생성할 수 있습니다.

사용자 정의 데이터 유형을 생성하려면 CREATE TYPE 명령을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

CREATE TYPE shirt_size AS ENUM ('S', 'M', 'L', 'XL', 'XXL');

이렇게 하면 S, M, L, XL 및 XXL의 5가지 가능한 값이 있는 "shirt_size"라는 새 데이터 유형이 생성됩니다.

또 한가지 예를 들어 전화번호에 대한 사용자 정의 데이터 유형을 생성하려면 다음 SQL 코드를 사용할 수 있습니다.

CREATE TYPE phone_number AS (
  area_code integer,
  number integer,
  extension integer
);

그런 다음 다음과 같이 테이블 정의에서 이 사용자 정의 데이터 유형을 사용할 수 있습니다.

CREATE TABLE customers (
  customer_id SERIAL PRIMARY KEY,
  name text NOT NULL,
  phone phone_number
);
INSERT INTO customers (name, phone) VALUES ('John Doe', '(123, 4567890, 1234)');
UPDATE customers SET phone = '(456, 7891234, NULL)' WHERE customer_id = 1;
DELETE FROM customers WHERE customer_id = 1;
  1. 개체 관계형 지원: PostgreSQL은 상속, 다형성 및 캡슐화와 같은 개체 관계형 기능을 지원합니다. 이 기능을 통해 개발자는 다양한 데이터 유형을 처리할 수 있는 복잡한 데이터 모델을 만들 수 있습니다.

PostgreSQL은 상속, 다형성 및 캡슐화와 같은 객체 관계형 기능을 지원합니다. 다음은 상속을 사용하여 테이블을 만드는 예입니다.

CREATE TABLE vehicle (
    id SERIAL PRIMARY KEY,
    type TEXT NOT NULL,
    max_speed INTEGER NOT NULL
);

CREATE TABLE car (
    wheels INTEGER NOT NULL
) INHERITS (vehicle);

INSERT INTO vehicle (type, max_speed) VALUES ('Car', 200);
INSERT INTO car (id, wheels) VALUES (1, 4);

이 예에서는 "vehicle"과 "car"라는 두 개의 테이블을 만들었습니다. "car" 테이블은 "vehicle" 테이블에서 상속됩니다. 즉, "vehicle" 테이블의 모든 열이 자동으로 포함됩니다. "car" 테이블에 새 행을 삽입할 때 추가 "wheels" 열만 지정하면 됩니다.

또 한가지 예를 들어 "animals"라는 기본 테이블을 생성하고 이 테이블에서 상속하여 "cats" 테이블을 생성하려면 다음 SQL 코드를 사용할 수 있습니다.

CREATE TABLE animals (
  id SERIAL PRIMARY KEY,
  name TEXT,
  age INTEGER
);

CREATE TABLE cats (
  breed TEXT,
  temperament TEXT
) INHERITS (animals);

그런 다음 독립 실행형 테이블인 것처럼 "cats" 테이블을 쿼리하거나 "animals" 테이블과 조인하여 모든 동물 데이터를 검색할 수 있습니다.

SELECT * FROM cats WHERE breed = 'Siamese';
SELECT * FROM animals WHERE age > 5;
  1. 전체 텍스트 검색: PostgreSQL에는 전체 텍스트 검색 지원 기능이 내장되어 있어 개발자가 복잡한 텍스트 검색 쿼리를 수행할 수 있습니다.

PostgreSQL에는 개발자가 복잡한 텍스트 검색 쿼리를 수행할 수 있는 전체 텍스트 검색 지원 기능이 내장되어 있습니다. 예를 들면 다음과 같습니다.

CREATE TABLE books (
    id SERIAL PRIMARY KEY,
    title TEXT NOT NULL,
    author TEXT NOT NULL,
    content TEXT NOT NULL
);

INSERT INTO books (title, author, content) VALUES ('Pride and Prejudice', 'Jane Austen', 'It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.');

SELECT id, title FROM books WHERE to_tsvector('english', content) @@ to_tsquery('english', 'fortune');

이 예제에서는 "books" 테이블을 만들고 일부 샘플 데이터를 삽입했습니다. 그런 다음 to_tsvector 및 to_tsquery 함수를 사용하여 "content" 열에서 "fortune"이라는 단어에 대한 전체 텍스트 검색을 수행했습니다.

  1. JSON 지원: PostgreSQL은 JSON 데이터 유형을 기본적으로 지원하므로 JSON 데이터를 쉽게 저장하고 쿼리할 수 있습니다.

PostgreSQL은 JSON 데이터 유형을 기본적으로 지원하므로 JSON 데이터를 쉽게 저장하고 쿼리할 수 있습니다. 예를 들면 다음과 같습니다.

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    details JSON
);

INSERT INTO products (name, details) VALUES ('Product 1', '{"price": 10.99, "description": "A great product"}');

SELECT id, name, details->>'price' AS price FROM products WHERE details->>'description' = 'A great product';

이 예에서는 "details"라는 JSON 열이 있는 "products" 테이블을 만들었습니다. 일부 샘플 데이터를 삽입하고 "->>" 연산자를 사용하여 JSON 열에서 "가격" 값을 추출했습니다.

  1. 고급 인덱싱: PostgreSQL에는 B-트리, 해시, GiST, SP-GiST 및 GIN과 같은 고급 인덱싱 기능이 있습니다. 이러한 인덱싱 기술은 더 빠른 데이터 검색 및 검색 성능을 제공합니다.

PostgreSQL에는 B-트리, 해시, GiST, SP-GiST 및 GIN과 같은 고급 인덱싱 기능이 있습니다. 다음은 B-트리 인덱스를 사용하는 예입니다.

CREATE INDEX idx_users_name ON users (name);

SELECT * FROM users WHERE name = 'John Doe';

이 예에서는 "users" 테이블의 "name" 열에 B-tree 인덱스를 생성했습니다. "이름" 열을 필터링하는 쿼리를 실행할 때 PostgreSQL은 인덱스를 사용하여 일치하는 행을 빠르게 찾을 수 있습니다.

  1. 외부 데이터 래퍼: PostgreSQL은 개발자가 추가 소프트웨어나 미들웨어 없이도 MySQL 또는 Oracle과 같은 다른 데이터베이스의 데이터에 액세스할 수 있도록 하는 외부 데이터 래퍼를 지원합니다

PostgreSQL은 외부 데이터 래퍼를 지원하므로 추가 소프트웨어나 미들웨어 없이도 다른 데이터베이스의 데이터에 액세스할 수 있습니다. 예를 들어 MySQL 데이터베이스의 데이터에 액세스하려면 다음 SQL 코드를 사용할 수 있습니다

CREATE EXTENSION mysql_fdw;
CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'localhost', port '3306');
CREATE USER MAPPING FOR postgres SERVER mysql_server OPTIONS (username 'mysqluser', password 'mysqlpass');
IMPORT FOREIGN SCHEMA public FROM SERVER mysql_server INTO postgres;
  1. MVCC(Multi-Version Concurrency Control): PostgreSQL의 MVCC 기능을 사용하면 여러 트랜잭션이 서로를 차단하지 않고 동시에 동일한 데이터에 액세스할 수 있습니다.

다중 버전 동시성 제어(MVCC)
PostgreSQL의 MVCC 기능을 사용하면 여러 트랜잭션이 동일한 데이터에 동시에 액세스할 수 있습니다.

  1. 확장성: PostgreSQL은 확장성이 뛰어나며 개발자가 시스템에 새로운 기능, 연산자 및 데이터 유형을 추가할 수 있습니다.

PostgreSQL에는 값 목록을 저장하고 쿼리하는 데 유용할 수 있는 배열에 대한 기본 제공 지원이 있습니다. 예를 들어 항목 배열을 저장하는 "item_list" 열이 있는 "orders"라는 테이블을 만들려면 다음 SQL 코드를 사용할 수 있습니다.

CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  customer TEXT,
  item_list TEXT[]
);
INSERT INTO orders (customer, item_list)
VALUES ('John Doe', ARRAY['camera', 'lens', 'memory card']);

다음과 같이 배열 함수를 사용하여 "item_list" 열을 쿼리할 수도 있습니다.

SELECT * FROM orders WHERE 'camera' = ANY(item_list);
  1. 병렬 쿼리 실행

PostgreSQL은 병렬 쿼리 실행을 허용하여 대규모 데이터 세트에 대한 쿼리 처리 속도를 크게 높일 수 있습니다. 예를 들어 "sales" 테이블에 대한 병렬 쿼리 실행을 활성화하려면 다음 SQL 코드를 사용할 수 있습니다.

ALTER TABLE sales SET (parallel_workers = 4);
  1. 대형 개체 지원: PostgreSQL에는 이미지, 오디오 및 비디오 파일과 같은 대형 개체를 저장하고 조작하기 위한 지원 기능이 내장되어 있습니다.

PostgreSQL에서 대형 개체 지원을 사용하려면 대형 개체 식별자를 저장할 "oid" 열이 있는 테이블을 만든 다음 "lo_" 함수를 사용하여 대형 개체를 조작할 수 있습니다.

다음은 "oid" 열이 있는 "images"라는 테이블을 만드는 SQL 코드의 예입니다.

CREATE TABLE images (
  id SERIAL PRIMARY KEY,
  name TEXT,
  data OID
);
INSERT INTO images (name, data)
VALUES ('example_image.jpg', lo_import('/path/to/example_image.jpg'));
SELECT lo_export(images.data, '/path/to/exported_image.jpg') FROM images WHERE images.id = 1;

이러한 고유한 기능 덕분에 PostgreSQL은 복잡한 데이터 모델과 다양한 데이터 유형을 처리할 수 있는 매우 유연하고 강력한 RDBMS가 되어 엔터프라이즈급 애플리케이션에 널리 사용됩니다.

profile
좋은 개발자가 되고 싶은 그냥 개발자

0개의 댓글