Skip to content

junyeong-ai/rds-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

37 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

RDS CLI

CI Lint Rust Version DeepWiki

๐ŸŒ ํ•œ๊ตญ์–ด | 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"

๐ŸŽฏ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ๋ฒˆ๊ฐœ๊ฐ™์ด ๋น ๋ฅธ ์Šคํ‚ค๋งˆ ํƒ์ƒ‰

# ํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰ (์˜คํƒ€๋„ OK)
rds-cli schema show user  # โ†’ "users" ์ œ์•ˆ
rds-cli schema find order # โ†’ orders, order_items ์ฐพ๊ธฐ

# ๊ด€๊ณ„ ๋ถ„์„
rds-cli schema relationships orders

2. ์•ˆ์ „ํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰

# ์ž๋™ 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

3. ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ด€๋ฆฌ

# ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • (์•”ํ˜ธํ™”๋˜์–ด .rds-cli.toml์— ์ €์žฅ)
rds-cli secret set production

# ์ž๋™ํ™”
echo "password" | rds-cli secret set production --password-stdin

4. Named Queries๋กœ ํŒ€ ํ˜‘์—…

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

5. ๋‹ค์–‘ํ•œ ์ถœ๋ ฅ ํ˜•์‹

# 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.csv

๐Ÿ“ฆ ์„ค์น˜

์ถ”์ฒœ: Prebuilt Binary

curl -fsSL https://raw.githubusercontent.com/junyeong-ai/rds-cli/main/scripts/install.sh | bash

Cargo

cargo 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors