๐ ํ๊ตญ์ด | English
โก PostgreSQL/MySQL์ ์ํ ๋น ๋ฅด๊ณ ์์ ํ Database CLI
- ๐ ์ด๊ณ ์ (Rust ๊ธฐ๋ฐ, <5ms ์คํค๋ง ์กฐํ)
- ๐ ํ๋ก๋์ ์์ (์๋ LIMIT, ์ฝ๊ธฐ ์ ์ฉ)
- ๐ ํ ํ์ (Git ๋ฒ์ ๊ด๋ฆฌ Named Queries)
- ๐ ์ค๋งํธ ๊ฒ์ (ํผ์ง ๋งค์นญ, ์๋ ์์ฑ)
- ๋น ๋ฅธ ์คํค๋ง ์กฐํ: ์บ์ฑ์ผ๋ก <5ms
- ์์ ํ ์ฟผ๋ฆฌ: ์๋ LIMIT, ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋
- ํ ํ์ : Git ๋ฒ์ ๊ด๋ฆฌ Named Queries
- ์ํธํ ๋น๋ฐ๋ฒํธ: Git ์์ , ํ๊ฒฝ๋ณ์ ๋ถํ์
- ์ค๋งํธ ๊ฒ์: ํผ์ง ๋งค์นญ, ์๋ ์ ์
# 1. ์ค์น (์ ์ญ ์ค์ ์๋ ์์ฑ)
curl -fsSL https://raw.githubusercontent.com/junyeong-ai/rds-cli/main/scripts/install.sh | bash
# 2. ํ๋ก์ ํธ ์ค์
cd your-project
rds-cli config init # .rds-cli.toml ์์ฑ
rds-cli config edit # DB ์ ๋ณด ์
๋ ฅ
# 3. ๋น๋ฐ๋ฒํธ ์ค์ (์ํธํ)
rds-cli secret set local
# 4. ์คํค๋ง ์บ์ฑ ๋ฐ ์ฌ์ฉ
rds-cli refresh
rds-cli schema find user
rds-cli query "SELECT * FROM users"# ํ
์ด๋ธ ๊ฒ์ (์คํ๋ OK)
rds-cli schema show user # โ "users" ์ ์
rds-cli schema find order # โ orders, order_items ์ฐพ๊ธฐ
# ๊ด๊ณ ๋ถ์
rds-cli schema relationships orders# ์๋ LIMIT (์ค์ ๋ฐฉ์ง)
rds-cli query "SELECT * FROM orders"
# โ SELECT * FROM orders LIMIT 1000
# ํ๋ก๋์
์ฝ๊ธฐ ์ ์ฉ
rds-cli --profile prod query "DELETE FROM users"
# โ ERROR: Only SELECT queries allowed# ๋น๋ฐ๋ฒํธ ์ค์ (์ํธํ๋์ด .rds-cli.toml์ ์ ์ฅ)
rds-cli secret set production
# ์๋ํ
echo "password" | rds-cli secret set production --password-stdin# .rds-cli.toml์ ์ฟผ๋ฆฌ ์ ์ฅ (Git ๊ณต์ )
rds-cli saved save active_users \
"SELECT * FROM users WHERE last_login > NOW() - INTERVAL '7 days'"
# ํ์๋ค์ด ์ด๋ฆ์ผ๋ก ์คํ
rds-cli run active_users
# ํ๋ผ๋ฏธํฐ ์ฟผ๋ฆฌ
rds-cli saved save find_user "SELECT * FROM users WHERE email = :email"
rds-cli run find_user --arg email=test@example.com# JSON (jq ํ์ดํ๋ผ์ธ)
rds-cli --format json query "SELECT status, COUNT(*) FROM orders GROUP BY status" \
| jq '.rows | map({status: .[0], count: .[1]})'
# CSV (์์
import)
rds-cli --format csv query "SELECT * FROM products" > products.csvcurl -fsSL https://raw.githubusercontent.com/junyeong-ai/rds-cli/main/scripts/install.sh | bashcargo install rds-cli์ ํ์ฌํญ: Claude Code Skill์ ์ค์นํ๋ฉด AI๊ฐ ์์ฐ์ด๋ก DB๋ฅผ ํ์ํฉ๋๋ค.
์ ์ญ ์ค์ (~/.config/rds-cli/config.toml, ์ค์น ์ ์๋ ์์ฑ):
[defaults]
default_profile = "local"
cache_ttl_hours = 24
output_format = "table"ํ๋ก์ ํธ ์ค์ (.rds-cli.toml, config init์ผ๋ก ์์ฑ):
[profiles.local]
type = "postgresql"
host = "localhost"
port = 5432
user = "myuser"
database = "mydb"
[profiles.local.safety]
default_limit = 1000
allowed_operations = ["SELECT"]์ฐ์ ์์: CLI args > ์ํธํ ๋น๋ฐ๋ฒํธ > ํ๊ฒฝ๋ณ์ > ํ๋ก์ ํธ ์ค์ > ์ ์ญ ์ค์
๊ถ์ฅ: ์ํธํ ์ ์ฅ
rds-cli secret set local
# .rds-cli.toml์ ์ํธํ๋์ด ์ ์ฅ (Git ์์ )์ ํ: ํ๊ฒฝ๋ณ์
export DB_PASSWORD_LOCAL="secret"ํ ๊ณต์ ์ฟผ๋ฆฌ (./.rds-cli.toml, Git ์ปค๋ฐ):
[saved_queries.daily_stats]
sql = "SELECT DATE(created_at), COUNT(*) FROM orders GROUP BY 1 ORDER BY 1 DESC LIMIT 7"
description = "์ต๊ทผ 7์ผ ์ฃผ๋ฌธ ํต๊ณ"rds-cli config init # ์ค์ ํ์ผ ์์ฑ
rds-cli config edit # $EDITOR๋ก ์์
rds-cli config show # ํ์ฌ ์ค์ ํ์ธ
rds-cli config path # ์ค์ ํ์ผ ๊ฒฝ๋ก ์ถ๋ ฅ[profiles.production.safety]
default_limit = 100
max_limit = 1000
allowed_operations = ["SELECT"] # ์ฝ๊ธฐ ์ ์ฉ| ๋ช ๋ น์ด | ์ค๋ช |
|---|---|
schema find <pattern> |
ํ ์ด๋ธ ๊ฒ์ |
schema show <table> |
ํ ์ด๋ธ ์์ธ ์กฐํ |
schema relationships <table> |
๊ด๊ณ ๋ถ์ |
query <sql> |
์ฟผ๋ฆฌ ์คํ |
run <name> [-a k=v] |
Named query ์คํ |
saved [list|save|delete|show] |
์ฟผ๋ฆฌ ๊ด๋ฆฌ |
secret set <profile> |
๋น๋ฐ๋ฒํธ ์ํธํ ์ ์ฅ |
secret get <profile> |
๋น๋ฐ๋ฒํธ ๋ณตํธํ ์ถ๋ ฅ |
secret remove <profile> |
๋น๋ฐ๋ฒํธ ์ ๊ฑฐ |
secret reset |
๋ง์คํฐ ํค ์ด๊ธฐํ |
refresh |
์คํค๋ง ์บ์ ๊ฐฑ์ |
config [init|edit|show|path] |
์ค์ ๊ด๋ฆฌ |
์ต์
: --profile <name>, --format <json|csv|table>, --verbose
# ์บ์ ์์
rds-cli refresh
# ์ฐ๊ฒฐ ์คํจ
rds-cli secret get <profile>
# ๋ง์คํฐ ํค ๋ถ์ค
rds-cli secret reset
rds-cli secret set <profile>MIT OR Apache-2.0
For AI Agents: CLAUDE.md