Search

[PostgreSQL] docker λ₯Ό μ΄μš©ν•œ PostgreSQL (psql) νŠœν† λ¦¬μ–Ό

νƒ€μž…
μŠ€ν„°λ””
νƒœκ·Έ
PostgreSQL
docker
μƒνƒœ
Published
생성일
2023/01/03 05:59
μ΅œμ’… νŽΈμ§‘ μΌμ‹œ
2023/02/24 11:36
2 more properties

docker 둜 PostgreSQL λ„μš°κΈ°

postgres 도컀 이미지 pull

docker pull postgres:alpine
Bash
볡사
λ‚˜λŠ” κ²½λŸ‰ν™”λœ 이미지인 alpine 버전 을 μ‚¬μš©ν–ˆλ‹€.

도컀 μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰

λ°›μ•„μ˜¨ postgres:alpine 이미지λ₯Ό μ»¨ν…Œμ΄λ„ˆν™” μ‹œν‚¨λ‹€.
# docker run --name [μ»¨ν…Œμ΄λ„ˆλͺ…] -e [ν™˜κ²½λ³€μˆ˜ν‚€=ν™˜κ²½λ³€μˆ˜κ°’] -d -p [ν¬νŠΈλ°”μΈλ”©] [이미지λͺ…] docker run --name postgres-0 -e POSTGRES_PASSWORD=password -d -p 5432:5432 postgres:alpine
Bash
볡사
μ˜΅μ…˜μ€ μ•„λž˜μ™€ κ°™λ‹€.
β€’
--name : μ»¨ν…Œμ΄λ„ˆ 이름을 λͺ…μ‹œν•˜λŠ” μ˜΅μ…˜
β€’
-e : μ»¨ν…Œμ΄λ„ˆμ˜ ν™˜κ²½λ³€μˆ˜λ₯Ό μ„€μ •ν•˜λŠ” μ˜΅μ…˜. μ—¬κΈ°μ„œλŠ” POSTGRES_PASSWORD=password ν™˜κ²½λ³€μˆ˜λ₯Ό μ„€μ •ν–ˆλ‹€.
β€’
-d : μ»¨ν…Œμ΄λ„ˆκ°€ detached λͺ¨λ“œλ‘œ μ‹€ν–‰λ˜μ–΄μ„œ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λ™μž‘ν•˜κ²Œ λœλ‹€.
β€’
-p : 호슀트 ν¬νŠΈμ™€ μ»¨ν…Œμ΄λ„ˆ 포트λ₯Ό λ°”μΈλ”©ν•˜λŠ” μ˜΅μ…˜ ( 호슀트 5432 포트 β†’ μ»¨ν…Œμ΄λ„ˆ 5432 포트)
참고자료
μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ κ²°κ³Ό μ°½ (-d μ˜΅μ…˜μœΌλ‘œ κ΅¬λ™μ‹œμΌ°κΈ° λ•Œλ¬Έμ— λ°±κ·ΈλΌμš΄λ“œλ‘œ μ‹€ν–‰λ˜κ³  터미널엔 μ»¨ν…Œμ΄λ„ˆ id 만 좜λ ₯λœλ‹€)

DB 접속

1. 도컀 μ»¨ν…Œμ΄λ„ˆλ‘œ 직접 접속

μ‹€ν–‰λ˜κ³  μžˆλŠ” μ»¨ν…Œμ΄λ„ˆμ— 직접 μ ‘μ†ν•΄μ„œ bash μ‰˜ μ‹€ν–‰
# docker exec -it [μ»¨ν…Œμ΄λ„ˆλͺ…] bash docker exec -it postgres-0 bash
Bash
볡사
# psql -h {호슀트λͺ…} -p {포트 번호} -U {μ‚¬μš©μžλͺ…} -d {λ°μ΄ν„°λ² μ΄μŠ€λͺ…} psql -U postgres
Bash
볡사
λ‘œμ»¬μ— μžˆλŠ” postgreSQL μ„œλ²„λŠ” 호슀트λͺ…, 포트번호 λ₯Ό μƒλž΅ κ°€λŠ₯ν•˜λ‹€.
그리고 μ‚¬μš©μžλͺ…κ³Ό λ°μ΄ν„°λ² μ΄μŠ€λͺ…이 κ°™μœΌλ©΄ λ°μ΄ν„°λ² μ΄μŠ€λͺ… λ˜ν•œ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.
λ”°λΌμ„œ psql -U postgres λ§ŒμœΌλ‘œλ„ 접속이 κ°€λŠ₯ν•˜λ‹€.
(도컀 μ΄λ―Έμ§€λ‘œ λ‹€μš΄ 받은 postgreSQL 의 λ””ν΄νŠΈ μ‚¬μš©μžλͺ…κ³Ό λ°μ΄ν„°λ² μ΄μŠ€λͺ…은 λ‘˜ λ‹€ postgre 이닀.)
접속화면

2. λ‘œμ»¬μ—μ„œ 접속

μ»¨ν…Œμ΄λ„ˆμ™ΈλΆ€ν¬νŠΈ(둜컬 포트) κ³Ό μ»¨ν…Œμ΄λ„ˆλ‚΄λΆ€ν¬νŠΈ(μ»¨ν…Œμ΄λ„ˆ 포트) λ₯Ό μ΄μš©ν•˜μ—¬ λ‘œμ»¬μ—μ„œ μ ‘μ†ν•œλ‹€.
μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ 5432:5432 둜 ν¬νŠΈλ°”μΈλ”© μ‹œμΌ°μœΌλ―€λ‘œ λ‘œμ»¬μ—μ„œ 5432 둜 μ ‘μ†ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆμ˜ 5432 포트둜 μ ‘μ†λœλ‹€.
psql -h localhost -p 5432 -U postgres
Bash
볡사
이 λ•Œ λ§Œμ•½ 둜컬의 5432 μ—μ„œ λŒμ•„κ°€λŠ” 기쑴의 postgreSQL 이 μžˆλ‹€λ©΄ ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œλ₯Ό μ‹œμΌœμ£Όμ–΄μ•Ό ν•œλ‹€. (포트 μΆ©λŒλ‚¨)
brew services stop postgresql # λ‘œμ»¬μ—μ„œ ꡬ동쀑인 postgreSQL 쀑지
Bash
볡사
도컀 μ»¨ν…Œμ΄λ„ˆλ‘œ λ„μ›Œμ§„ postgreSQL 에 μ ‘μ†ν•œ λͺ¨μŠ΅

psql κΈ°λ³Έ λͺ…λ Ήμ–΄

GUI νˆ΄λ‘œλ„ DB λ₯Ό μ‘°μž‘ν•  수 μžˆμ§€λ§Œ CLI 둜 postgreSQL λ₯Ό 닀루기 μœ„ν•΄μ„œλŠ” psql (postgreSQL μ‰˜) 을 μ‚¬μš©ν•œλ‹€.
psql 은 μ»€λ§¨λ“œ μ•žμ— \ λ₯Ό λΆ™νžŒλ‹€.

psql 도움말 : \?

postgres=# \?
Bash
볡사

sql 도움말 : \h

도움말 λͺ©λ‘ 보기

postgres=# \h # λ˜λŠ” postgres=# \help
Bash
볡사

νŠΉμ • SQL 도움말 보기

\h 에 λ‚˜μ˜¨ 쿼리듀을 두 번째 인자둜 λ„˜κ²¨μ£Όλ©΄ νŠΉμ • SQL 에 λŒ€ν•œ 도움말을 λ³Ό 수 μžˆλ‹€.
# select 에 λŒ€ν•œ 도움말 postgres=# \h select
Bash
볡사

μœ μ € λͺ©λ‘ 쑰회 : \du

postgres=# \du
Bash
볡사

λ°μ΄ν„°λ² μ΄μŠ€ λͺ…λ Ήμ–΄

λ°μ΄ν„°λ² μ΄μŠ€ 생성 : create database {λ°μ΄ν„°λ² μ΄μŠ€λͺ…}

# create database {λ°μ΄ν„°λ² μ΄μŠ€λͺ…} postgres=# create database testdb;
Bash
볡사

λ°μ΄ν„°λ² μ΄μŠ€ λͺ©λ‘ 쑰회 : \l

postgres=# \l # λ˜λŠ” postgres=# \list List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres testdb | postgres | UTF8 | en_US.utf8 | en_US.utf8 | (4 rows)
Bash
볡사

λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©(접속) : \c

# postgres=# \c [λ°μ΄ν„°λ² μ΄μŠ€λͺ…] # testdb λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš© postgres=# \c testdb psql (14.6 (Homebrew), server 15.1) WARNING: psql major version 14, server major version 15. Some psql features might not work. You are now connected to database "testdb" as user "postgres". testdb=#
Bash
볡사

μŠ€ν‚€λ§ˆ λͺ…λ Ήμ–΄

postgreSQL 은 λ°μ΄ν„°λ² μ΄μŠ€ > μŠ€ν‚€λ§ˆ > ν…Œμ΄λΈ”μ˜ 계측ꡬ쑰λ₯Ό 가진닀.
MySQL μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ == μŠ€ν‚€λ§ˆ 인 것과 λŒ€μ‘°μ μ΄λ‹€.
β€’
postgreSQL μ—μ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ•ˆμ— μŠ€ν‚€λ§ˆλ₯Ό λ§Œλ“€κ³ , μŠ€ν‚€λ§ˆ μ•ˆμ— ν…Œμ΄λΈ”μ„ 생성함
β€’
λ””ν΄νŠΈλ‘œ public μŠ€ν‚€λ§ˆκ°€ μ‘΄μž¬ν•˜κ³ , λ³„λ„μ˜ λͺ…령을 ν•˜μ§€ μ•Šκ³  ν…Œμ΄λΈ”μ„ λ§Œλ“€κ²Œ 되면 이 public μŠ€ν‚€λ§ˆ μ•ˆμ— ν…Œμ΄λΈ”μ΄ 생성됨

μŠ€ν‚€λ§ˆ 쑰회 : \dn

testdb=# \dn List of schemas Name | Owner --------+------------------- public | pg_database_owner (1 row)
Bash
볡사
λ°μ΄ν„°λ² μ΄μŠ€ μ•ˆμ— λ””ν΄νŠΈ μŠ€ν‚€λ§ˆλ‘œ public 이 μ‘΄μž¬ν•œλ‹€.

μŠ€ν‚€λ§ˆ 생성 : create schema {μŠ€ν‚€λ§ˆλͺ…}

testdb=# create schema myschema; CREATE SCHEMA # μ œλŒ€λ‘œ μƒμ„±λ˜μ—ˆλŠ”μ§€ μŠ€ν‚€λ§ˆ 쑰회 testdb=# \dn List of schemas Name | Owner ----------+------------------- myschema | postgres public | pg_database_owner (2 rows)
Bash
볡사

μŠ€ν‚€λ§ˆλͺ… μˆ˜μ • : ALTER SCHEMA {name} RENAME TO {new_name}

testdb=# \dn List of schemas Name | Owner ----------+------------------- myschema | postgres public | pg_database_owner (2 rows) testdb=# alter schema myschema rename to ourschema; ALTER SCHEMA testdb=# \dn List of schemas Name | Owner -----------+------------------- ourschema | postgres public | pg_database_owner (2 rows)
Bash
볡사
myschema β†’ ourschema 둜 μŠ€ν‚€λ§ˆλͺ… λ³€κ²½

μŠ€ν‚€λ§ˆ μ‚­μ œ : DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

testdb=# \dn List of schemas Name | Owner -----------+------------------- ourschema | postgres public | pg_database_owner (2 rows) testdb=# drop schema ourschema; DROP SCHEMA testdb=# \dn List of schemas Name | Owner --------+------------------- public | pg_database_owner (1 row)
Bash
볡사
ourschema μ‚­μ œ

ν…Œμ΄λΈ” λͺ…λ Ήμ–΄

MySQL ν…Œμ΄λΈ” λͺ…령어와 큰 ν‹€μ—μ„œ 거의 λΉ„μŠ·ν•˜λ‹€.
postgreSQL 은 더 λ§Žμ€ 데이터 νƒ€μž…μ„ μ§€μ›ν•œλ‹€.

ν…Œμ΄λΈ” 생성 : create table

ν…Œμ΄λΈ” μˆ˜μ • : alter table

ν…Œμ΄λΈ” μ‚­μ œ : drop table

정리

기본적인 psql μ»€λ§¨λ“œμ™€ DDL μœ„μ£Όλ‘œ μš”μ•½ν–ˆμœΌλ©° 더 μžμ„Έν•œ λͺ…령어와 μ‚¬μš©λ²•μ€ PostgreSQL Tutorial μ°Έκ³ 
참고자료