#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?