#18 PostgreSQL Extensions

#18.0 Introduction

Extention์„ ํ™œ์šฉํ•ด ๊ธฐ์กด database๊ฐ€ ํ•˜์ง€ ๋ชปํ•˜๋˜ ๊ฒƒ๋“ค์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คŒ โ‡’ postgreSQL ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ 

select * from pg_available_extensions;

-- ํ™œ์„ฑํ™” / ๋น„ํ™œ์„ฑํ™”
CREATE EXTENSION hstore;
DROP EXTENSION hstore;

-- ์‚ฌ์šฉํ•œ extension ํ™•์ธ
SELECT * FROM pg_extension;

#18.1 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 * FROM USERS;
-- HSSTORE, JSON ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘์ฒฉ๋œ ์ •๋ณด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ HSTORE๋Š” ์ด๋ฅผ ๋ฐฉ์ง€ํ•จ

SELECT
  user_id,
  prefs -> 'theme',
  prefs -> ARRAY['lang', 'notifications'],
  prefs ? 'font_size' AS has_font_size,
  prefs ?| ARRAY['push_notifications', 'start_page']
FROM users;

SELECT
  user_id,
  akeys(prefs),
  avals(prefs)
FROM users;

SELECT
  user_id,
  each(prefs)
FROM users;

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

UPDATE users
SET
  prefs = prefs || hstore(
  ARRAY['currency', 'cookies_ok'],
  ARRAY['krw', 'yes']
)
  
-- DELETE
UPDATE users
SET prefs = delete(prefs, 'cookies_ok');

SELECT * from users;

DROP TABLE users

#18.2 PGCrypto

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

-- password ํ•ด์‹ฑ
INSERT INTO users (username, password)
VALUES ('son', crypt('user_password', gen_salt('bf')));

SELECT username
FROM users
WHERE 
  username = 'son' AND
  password = crypt('user_password', password);

#18.3 UUID

CREATE EXTENSION "uuid-ossp";

-- BIGINT์˜ ํ•œ๊ณ„ ๋ณด์™„ ๊ฐ€๋Šฅ
CREATE TABLE users (
  user_id UUID PRIMARY KEY DEFAULT(uuid_generate_v4()),
  username VARCHAR(100),
  password VARCHAR(100)
)

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

SELECT * FROM users;

Last updated

Was this helpful?