티스토리 뷰

 

1. Extensions란

 PostgreSQL에서 기본 기능에 없는 고급 기능을 모듈처럼 설치해서 사용할 수 있도록 만든 것으로, CREATE EXTENSION extensions_이름; 으로 활성화가 가능하다.

 

2. hstore

 hstore는 테이블의 컬럼 하나에 동적 key-value 데이터를 저장할 수 있게 한다. 마치 JSON처럼 동작하지만 더 단순하고, text 기반 key-value 저장용이다.

 

2-1. 예시 코드

2-1-1. 설치 및 테이블 생성

CREATE EXTENSION hstore;

CREATE TABLE users (
  user_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  prefs HSTORE  -- Key-Value 저장 공간
);

 

2-1-2. 데이터 삽입 

INSERT INTO users (prefs) VALUES
('theme => dark, lang => kr'),
('theme => light, lang => es, notifications => on');

 

2-1-3. 조회

SELECT 
  user_id,
  prefs -> 'theme' AS theme,
  prefs ? 'font_size' AS has_font_size,
  AKEYS(prefs) AS keys,
  AVALS(prefs) AS values
FROM users;
연산자 의미
-> 특정 key의 값 조회
? key 존재 여부 확인
?| 배열에 있는 것들이 존재하는지
AKEYS() key 목록 반환
AVALS() value 목록 반환

 

2-1-4. 수정

-- 값 변경
UPDATE users SET prefs['theme'] = 'light' WHERE user_id = 1;

-- 여러 키 추가
UPDATE users SET prefs = prefs || hstore(ARRAY['currency', 'cookies_ok'], ARRAY['krw', 'yes']);

 

3. pgcrypto

 pgcrypto는 PostgreSQL에서 암호화, 복호화, 해싱을 지원하는 확장 기능이다. 특히 CRYPT() 함수와 GEN_SALT() 함수는 비밀번호 저장에도 자주 쓰인다.

 

3-1. 예시 코드

3-1-1. 설치 및 테이블 생성

CREATE EXTENSION pgcrypto;

CREATE TABLE users (
  user_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  username VARCHAR(100),
  password VARCHAR(100)
);

 

3-1-2. 비밀번호 저장

INSERT INTO users (username, password)
VALUES ('nico', CRYPT('user_password', GEN_SALT('bf')));

 

함수 설명
CRYPT(비밀번호, 솔트) 솔트를 이용해 비밀번호 해시 생성
GEN_SALT('bf') bcrypt 방식 솔트 생성 (Blowfish 기반)

 

3-1-3. 비밀번호 비교

SELECT * FROM users
WHERE username = 'nico' 
  AND password = CRYPT('user_password', password);

 

4. uuid-ossp

 uuid-ossp는 PostgreSQL에서 UUID(고유 식별자)를 자동 생성해주는 확장이다. 기본 키나 공개용 식별자 등에 유용하게 사용된다.

 

4-1. 예시 코드

4-1-1. 설치 및 테이블 생성

CREATE EXTENSION "uuid-ossp";

CREATE TABLE users (
  user_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), -- 랜덤 UUID
  username VARCHAR(100),
  password VARCHAR(100)
);
함수 설명
uuid_generate_v1() 타임스탬프 기반
uuid_generate_v4() 랜덤 기반 (일반적으로 가장 많이 사용)

 

uuid-ossp의 경우, 이름에 하이픈(-)이 포함되어 있기에 CREATE할 때 큰따옴표로 감싸야 한다.

 

4-1-2. 데이터 삽입

INSERT INTO users (username, password)
VALUES ('nico', '1234');

SELECT * FROM users;

 

5. 마무리 요약

확장 기능 설치 방법
hstore 동적 key-value 저장 CREATE EXTENSIONS hstore;
pgcrypto 비밀번호 해시 (bcrypt), 암호화 CREATE EXTENSION pgcrypto;
uuid-ossp UUID 생성 함수 제공 CREATE EXTENSION "uuid-ossp";

 


관련 문서

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함