PostgreSQL

Leejaegunยท2025๋…„ 6์›” 11์ผ

๐Ÿ’ก PostgreSQL์ด๋ž€?

โœ… ์ •์˜

PostgreSQL(ํฌ์ŠคํŠธ๊ทธ๋ ˆ์Šคํ์—˜, ์ค„์—ฌ์„œ Postgres)์€ ๊ฐ์ฒด-๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

  • ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜ (BSD ๋ผ์ด์„ ์Šค)
  • ACID ํŠธ๋žœ์žญ์…˜ ์ง€์›
  • JSON, GIS, Full-text Search ๋“ฑ ํ™•์žฅ ๊ฐ€๋Šฅ

โœ… ์–ด์›๊ณผ ์—ญ์‚ฌ

  • ์ด๋ฆ„ ์œ ๋ž˜:

    • Ingres โ†’ Post-Ingres โ†’ PostgreSQL
    • Ingres(1970๋…„๋Œ€ UC๋ฒ„ํด๋ฆฌ ์—ฐ๊ตฌ ํ”„๋กœ์ ํŠธ) ํ›„์†์œผ๋กœ ํƒ„์ƒํ•œ DB
  • 1986๋…„: Michael Stonebraker ๊ต์ˆ˜ ์ฃผ๋„๋กœ ๊ฐœ๋ฐœ ์‹œ์ž‘

  • 1996๋…„๋ถ€ํ„ฐ ๊ณต์‹์ ์œผ๋กœ PostgreSQL์ด๋ผ๋Š” ์ด๋ฆ„ ์‚ฌ์šฉ

๐Ÿ” PostgreSQL vs SQLite vs MySQL

ํ•ญ๋ชฉPostgreSQLSQLiteMySQL
์„ค์น˜ ํ˜•ํƒœ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ํŒŒ์ผ ๊ธฐ๋ฐ˜ (๋‚ด์žฅํ˜•)์„œ๋ฒ„ ๊ธฐ๋ฐ˜
ํ™•์žฅ์„ฑ๋งค์šฐ ๋†’์Œ (MVCC, ํ™•์žฅํ•จ์ˆ˜)๋‚ฎ์Œ์ค‘๊ฐ„
๋™์‹œ์„ฑ ์ฒ˜๋ฆฌMVCC(๋‹ค์ค‘ ๋ฒ„์ „ ๋™์‹œ์„ฑ) ์ง€์›๋‹จ์ผ ํ”„๋กœ์„ธ์Šค์ œํ•œ์  ๋ฝ ๊ธฐ๋ฐ˜
ํ‘œ์ค€ SQLSQL ํ‘œ์ค€ ์ค€์ˆ˜์œจ ๋†’์Œ๊ฑฐ์˜ ์ค€์ˆ˜์ผ๋ถ€ ๋ฒ—์–ด๋‚จ
JSON ์ง€์›โœ… ์™„์ „ ์ง€์›โŒ ์—†์Œโœ… ์žˆ์Œ
์šฉ๋„๊ธฐ์—…, ๋ถ„์„, AI ์—ฐ๋™ ๋“ฑ๋ชจ๋ฐ”์ผ, IoT, ๊ฐ„๋‹จํ•œ ์•ฑ์›น ๋ฐฑ์—”๋“œ์šฉ ๋Œ€์ค‘์  ์„ ํƒ์ง€

๐Ÿ‘‰ PostgreSQL์€ ๋Œ€ํ˜• ์‹œ์Šคํ…œ, AI, ํ†ต๊ณ„, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ํŠนํžˆ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค! PostgreSQL์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๋ช…๋ น์–ด(Command) ๋“ค์„ ๋ชฉ์ ๋ณ„๋กœ ์ •๋ฆฌํ•˜๊ณ , ๊ฐ๊ฐ ๊ฐ„๋‹จํ•œ ์„ค๋ช…๋„ ๋ง๋ถ™์—ฌ ๋“œ๋ฆด๊ฒŒ์š”.

๐Ÿงพ PostgreSQL ๋ช…๋ น์–ด ์ •๋ฆฌํ‘œ

๋ช…๋ น์–ด์„ค๋ช…
\l ๋˜๋Š” \listํ˜„์žฌ ์„œ๋ฒ„์— ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) ๋ชฉ๋ก ๋ณด๊ธฐ
\c DB๋ช…ํ•ด๋‹น ์ด๋ฆ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ ‘์† (connect)
\dtํ˜„์žฌ DB์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ” ๋ชฉ๋ก ๋ณด๊ธฐ
\d ํ…Œ์ด๋ธ”๋ช…ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์ƒ์„ธ ๊ตฌ์กฐ(์Šคํ‚ค๋งˆ) ๋ณด๊ธฐ
\duPostgreSQL ์‚ฌ์šฉ์ž(user) ๋ชฉ๋ก ๋ณด๊ธฐ
\qpsql ์ข…๋ฃŒ (quit)
\hSQL ๋ฌธ๋ฒ• ๋„์›€๋ง ๋ณด๊ธฐ (e.g., \h CREATE TABLE)
\conninfoํ˜„์žฌ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ (DB๋ช…, ์‚ฌ์šฉ์ž, ํ˜ธ์ŠคํŠธ ๋“ฑ)

๐Ÿงฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ SQL ๋ช…๋ น์–ด

๋ช…๋ น์–ด์„ค๋ช…
CREATE DATABASE dbname;์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
DROP DATABASE dbname;๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ญ์ œ
ALTER DATABASE dbname ...;DB ์†์„ฑ ๋ณ€๊ฒฝ
SELECT current_database();ํ˜„์žฌ ์ ‘์† ์ค‘์ธ DB ์ด๋ฆ„ ํ™•์ธ

๐Ÿ“‚ ํ…Œ์ด๋ธ” ๊ด€๋ จ SQL ๋ช…๋ น์–ด

๋ช…๋ น์–ด์„ค๋ช…
CREATE TABLE ํ…Œ์ด๋ธ”๋ช… (...);ํ…Œ์ด๋ธ” ์ƒ์„ฑ
DROP TABLE ํ…Œ์ด๋ธ”๋ช…;ํ…Œ์ด๋ธ” ์‚ญ์ œ
ALTER TABLE ...ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ณ€๊ฒฝ
INSERT INTO ... VALUES (...);๋ฐ์ดํ„ฐ ์‚ฝ์ž…
SELECT * FROM ํ…Œ์ด๋ธ”๋ช…;ํ…Œ์ด๋ธ” ๋‚ด์šฉ ์กฐํšŒ
UPDATE ํ…Œ์ด๋ธ”๋ช… SET ... WHERE ...;๋ฐ์ดํ„ฐ ์ˆ˜์ •
DELETE FROM ํ…Œ์ด๋ธ”๋ช… WHERE ...;๋ฐ์ดํ„ฐ ์‚ญ์ œ

๐Ÿง  ๊ถŒํ•œ/์‚ฌ์šฉ์ž ๊ด€๋ จ ๋ช…๋ น์–ด

๋ช…๋ น์–ด์„ค๋ช…
CREATE USER username WITH PASSWORD '๋น„๋ฐ€๋ฒˆํ˜ธ';์‚ฌ์šฉ์ž ์ƒ์„ฑ
GRANT ALL PRIVILEGES ON DATABASE dbname TO username;์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ ๋ถ€์—ฌ
DROP USER username;์‚ฌ์šฉ์ž ์‚ญ์ œ

๐Ÿ”ง ๊ธฐํƒ€ ๋ช…๋ น์–ด

๋ช…๋ น์–ด์„ค๋ช…
\timing์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ • on/off
\i ํŒŒ์ผ.sqlSQL ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์‹คํ–‰
\x๊ฒฐ๊ณผ๋ฅผ ์„ธ๋กœ ๋ณด๊ธฐ ํ˜•ํƒœ๋กœ ์ „ํ™˜ (๊ฐ€๋…์„ฑ โ†‘)

๐ŸŽฏ ์‹ค์ „ ์˜ˆ์‹œ

-- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
CREATE DATABASE legaldb;

-- legaldb์— ์ ‘์†
\c legaldb

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE laws (
    law_id TEXT PRIMARY KEY,
    law_name TEXT,
    enforcement_date DATE
);

-- ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
INSERT INTO laws VALUES ('001872', '๊ทผ๋กœ๊ธฐ์ค€๋ฒ•', '2025-10-23');

-- ์กฐํšŒ
SELECT * FROM laws;

โœ… ๋งˆ๋ฌด๋ฆฌ ํ•œ ์ค„ ์ •๋ฆฌ

PostgreSQL์€ SQL ๊ธฐ๋ฐ˜์ด์ง€๋งŒ \๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด(\l, \dt ๋“ฑ)๋Š” psql ์ „์šฉ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
์‹ค์ „์—์„œ๋Š” SQL + psql ๋ช…๋ น์–ด๋ฅผ ๋ณ‘ํ–‰ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.


โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. PostgreSQL ์ ‘์† ๋จผ์ € ํ•˜๊ธฐ

sudo -u postgres psql

๋˜๋Š” ๋ณธ์ธ์ด postgres ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด:

psql -U postgres

2. ์ ‘์† ํ›„ legaldb๋กœ ์ด๋™

PostgreSQL ์‰˜์— ์ง„์ž…ํ–ˆ์œผ๋ฉด ์ด์ œ ์ด ๋ช…๋ น์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

\c legaldb

์ถœ๋ ฅ:

You are now connected to database "legaldb" as user "postgres".

3. ํ…Œ์ด๋ธ” ๋ณด๊ธฐ

\dt

๐Ÿ’ก ์ „์ฒด ์ˆœ์„œ ์˜ˆ์‹œ

# 1. PostgreSQL ์ ‘์†
sudo -u postgres psql

# 2. legaldb ์ ‘์†
\c legaldb

# 3. ํ…Œ์ด๋ธ” ๋ณด๊ธฐ
\dt

# 4. ํ…Œ์ด๋ธ” ๋‚ด์šฉ ๋ณด๊ธฐ
SELECT * FROM laws;

โœจ ์š”์•ฝ

ํ•˜๊ณ  ์‹ถ์€ ์ผ๋ช…๋ น์–ด
PostgreSQL CLI ์ง„์ž…sudo -u postgres psql
DB ์ „ํ™˜\c legaldb (psql ์•ˆ์—์„œ๋งŒ)
ํ…Œ์ด๋ธ” ๋ชฉ๋ก\dt
์ข…๋ฃŒ\q
profile
Lee_AA

0๊ฐœ์˜ ๋Œ“๊ธ€