티스토리 뷰

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"; |
관련 문서
'기록' 카테고리의 다른 글
Python으로 SQL 간단히 이용해보기 및 Drizzle이란 (0) | 2025.04.26 |
---|---|
Redis의 핵심 자료형 배운 것 정리 및 명령어 실습 (0) | 2025.04.20 |
PostgreSQL의 JSON/JSONB 배운 것 정리 (0) | 2025.04.19 |
트랜잭션(Transaction)에 대해 배운 것 정리 및 예제 (0) | 2025.04.19 |
PostgreSQL Function & Procedure 배운 것 정리 (0) | 2025.04.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코드스테이츠
- Redux
- 햄버거버튼
- 구현
- 카카오맵
- 타입스크립트
- aws
- CSS
- 알고리즘
- 동적계획법
- NextJS
- Next.js
- SQL
- typescript
- 스택
- 다이나믹프로그래밍
- 백준
- react
- C++
- 넥스트js
- 완전탐색
- async
- 브루트포스
- 프로그래머스
- 자바스크립트
- 비트마스킹
- themoviedb
- BFS
- 순열
- 리액트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함