본문 바로가기
SQL

[SQL] PostgreSQL Extensions

by busybee-busylife 2025. 3. 11.
728x90

Extension(확장 기능) 

SELECT * FROM pg_available_extensions;
-- 가능한 확장 기능 확인


SELECT * FROM pg_extension;
-- 활성화된 extension 확인

HStore

- Key-Value 저장을 위한 확장 기능 

- 비구조화된(스키마 없는) 데이터 저장 가능 

- JSON과 비슷한 Key-Value 데이터 구조를 제공하나, 더 빠른 처리 가능 

 

JSON: nested 데이터 구조 가능(중첩 가능) 

HStore: key-Value only 

CREATE EXTENSION hstore;
-- hstore 활성화 


CREATE TABLE users (
  user_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  prefs HSTORE
  );


-- 구조화되지 않은 데이터 입력
INSERT INTO users (prefs) VALUES
('theme => dark, lang => kr, notifications => off'),
('theme => light, lang => es, notifications => on, push_notifications => on, email_notifications => off'),
('theme => dark, lang => it, start_page => dashboard, font_size => large');


-- 칼럼 형태로 조회하기 
SELECT 
  user_id, 
  prefs -> 'theme',
  prefs -> ARRAY['lang', 'notifications'],  -- 두개의 key를 한번에 받기 
  prefs ? 'font_size' AS has_font_size      -- 'font_size' 값 존재 여부 
FROM users;

 

더 많은 연산자 확인👇

https://www.postgresql.org/docs/current/hstore.html


PGCrypto 

데이터베이스에서 암호화 작업이 필요한 경우 

CREATE EXTENSION pgcrypto;
-- 익스텐션 활성화 


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


INSERT INTO users (username, password)
  VALUES ('dodo', crypt('user_password', gen_salt('bf')));
-- 비밀번호 해싱(고유값으로 변환)

UUID

데이터베이스에서 uuid를 생성

UUID(Universally Unique Identifier): 고유한 식별자를 생성하는 방법 중 하나 

데이터가 너무 많아 user_id가 BIGINT로 표현할 수 있는 범위를 넘어서는 경우 이것을 uuid로 변경하여 사용할 수 있다 

CREATE EXTENSION "uuid-ossp";
-- 익스텐션 활성화

CREATE TABLE users (
  user_id UUID PRIMARY KEY DEFAULT(uuid_generate_v4()),
  username VARCHAR(100),
  password VARCHAR(100)
  );


INSERT INTO users (username, password)
  VALUES ('dodo', '1234');
728x90

'SQL' 카테고리의 다른 글

[SQL] Redis  (0) 2025.03.11
[SQL] MongoDB  (0) 2025.03.11
[SQL] PostgreSQL JSON columns  (0) 2025.03.10
[SQL] Data Control Language  (0) 2025.03.10
[SQL] Transaction  (0) 2025.03.10