← 홈

🐘PostgreSQL

⌘K
🤖
Claude Code AI 도구
🤗
Hugging Face AI 도구
🦜
LangChain AI 도구
🧠
Keras AI 도구
🦙
Ollama AI 도구
🐍
Python 프로그래밍 언어
🟨
JavaScript 프로그래밍 언어
🔷
TypeScript 프로그래밍 언어
⚛️
React 프로그래밍 언어
🐹
Go 프로그래밍 언어
🦀
Rust 프로그래밍 언어
📊
MATLAB 프로그래밍 언어
🗄️
SQL 프로그래밍 언어
⚙️
C/C++ 프로그래밍 언어
Java 프로그래밍 언어
🟣
C# 프로그래밍 언어
🍎
Swift 프로그래밍 언어
🟠
Kotlin 프로그래밍 언어
Next.js 프로그래밍 언어
💚
Vue.js 프로그래밍 언어
🔥
Svelte 프로그래밍 언어
🎨
Tailwind CSS 프로그래밍 언어
💚
Node.js 프로그래밍 언어
🌐
HTML 프로그래밍 언어
🎨
CSS/SCSS 프로그래밍 언어
🐘
PHP 프로그래밍 언어
💎
Ruby 프로그래밍 언어
🔴
Scala 프로그래밍 언어
📊
R 프로그래밍 언어
🎯
Dart 프로그래밍 언어
💧
Elixir 프로그래밍 언어
🌙
Lua 프로그래밍 언어
🐪
Perl 프로그래밍 언어
🅰️
Angular 프로그래밍 언어
🚂
Express.js 프로그래밍 언어
🐱
NestJS 프로그래밍 언어
🛤️
Ruby on Rails 프로그래밍 언어
◼️
GraphQL 프로그래밍 언어
🟪
Haskell 프로그래밍 언어
💚
Nuxt.js 프로그래밍 언어
🔷
SolidJS 프로그래밍 언어
htmx 프로그래밍 언어
💻
VS Code 개발 도구
🧠
PyCharm 개발 도구
📓
Jupyter 개발 도구
🧠
IntelliJ IDEA 개발 도구
💚
Neovim 개발 도구
🔮
Emacs 개발 도구
🔀
Git DevOps & CLI
🐳
Docker DevOps & CLI
☸️
Kubernetes DevOps & CLI
☁️
AWS CLI DevOps & CLI
🔄
GitHub Actions DevOps & CLI
🐧
Linux 명령어 DevOps & CLI
💻
Bash 스크립팅 DevOps & CLI
🌐
Nginx DevOps & CLI
📝
Vim DevOps & CLI
🔨
Makefile DevOps & CLI
🧪
Pytest DevOps & CLI
🪟
Windows DevOps & CLI
📦
패키지 매니저 DevOps & CLI
🍎
macOS DevOps & CLI
🏗️
Terraform DevOps & CLI
🔧
Ansible DevOps & CLI
Helm DevOps & CLI
🔨
Jenkins DevOps & CLI
🔥
Prometheus DevOps & CLI
📊
Grafana DevOps & CLI
💻
Zsh DevOps & CLI
🐟
Fish Shell DevOps & CLI
💙
PowerShell DevOps & CLI
🔄
Argo CD DevOps & CLI
🔀
Traefik DevOps & CLI
☁️
Azure CLI DevOps & CLI
☁️
Google Cloud CLI DevOps & CLI
📟
tmux DevOps & CLI
🔧
jq DevOps & CLI
✂️
sed DevOps & CLI
📊
awk DevOps & CLI
🌊
Apache Airflow DevOps & CLI
🔢
NumPy 데이터베이스 & 데이터
🐼
Pandas 데이터베이스 & 데이터
🔥
PyTorch 데이터베이스 & 데이터
🧠
TensorFlow 데이터베이스 & 데이터
📈
Matplotlib 데이터베이스 & 데이터
🐘
PostgreSQL 데이터베이스 & 데이터
🐬
MySQL 데이터베이스 & 데이터
🍃
MongoDB 데이터베이스 & 데이터
🔴
Redis 데이터베이스 & 데이터
🔍
Elasticsearch 데이터베이스 & 데이터
🤖
Scikit-learn 데이터베이스 & 데이터
👁️
OpenCV 데이터베이스 & 데이터
Apache Spark 데이터베이스 & 데이터
🪶
SQLite 데이터베이스 & 데이터
Supabase 데이터베이스 & 데이터
🔵
Neo4j 데이터베이스 & 데이터
📨
Apache Kafka 데이터베이스 & 데이터
🐰
RabbitMQ 데이터베이스 & 데이터
🔤
Regex 유틸리티
📝
Markdown 유틸리티
📄
LaTeX 유틸리티
🔐
SSH & GPG 유틸리티
🌐
curl & HTTP 유틸리티
📜
reStructuredText 유틸리티
🚀
Postman 유틸리티
🎬
FFmpeg 유틸리티
🖼️
ImageMagick 유틸리티
🔍
ripgrep 유틸리티
🔍
fzf 유틸리티
📗
Microsoft Excel 오피스 애플리케이션
📘
Microsoft Word 오피스 애플리케이션
📙
Microsoft PowerPoint 오피스 애플리케이션
📝
한컴 한글 한컴오피스
📽️
한컴 한쇼 한컴오피스
📊
한컴 한셀 한컴오피스
📄
Google 문서 Google Workspace
📊
Google 스프레드시트 Google Workspace
📽️
Google 프레젠테이션 Google Workspace
🔌
Cadence Virtuoso EDA & 하드웨어
⚙️
Synopsys EDA EDA & 하드웨어
💎
Verilog & VHDL EDA & 하드웨어
LTSpice EDA & 하드웨어
🔧
KiCad EDA & 하드웨어
📝
Notion 생산성 도구
💎
Obsidian 생산성 도구
💬
Slack 생산성 도구
🎮
Discord 생산성 도구
🎨
Figma 디자인 도구
📘
Confluence Atlassian
📋
Jira Atlassian
🃏
Jest 테스팅
Vitest 테스팅
🎭
Playwright 테스팅
🌲
Cypress 테스팅
🌐
Selenium 테스팅
💙
Flutter 모바일 개발
📱
React Native 모바일 개발
🍎
SwiftUI 모바일 개발
📱
Expo 모바일 개발
🐍
Django 웹 프레임워크
FastAPI 웹 프레임워크
🌶️
Flask 웹 프레임워크
🍃
Spring Boot 웹 프레임워크
🍸
Gin 웹 프레임워크
Vite 빌드 도구
📦
Webpack 빌드 도구
esbuild 빌드 도구
🐘
Gradle 빌드 도구
🪶
Maven 빌드 도구
🔧
CMake 빌드 도구
🎮
Unity 게임 개발
🤖
Godot 게임 개발
🔌
Arduino 임베디드 & IoT
🔍
Nmap 보안
🐕
Datadog 모니터링
📖
Swagger/OpenAPI 문서화
검색 결과가 없습니다
EN KO

🔌 연결 & 기본

🔗 연결

psql -U username -d database 데이터베이스 연결
psql -h host -p 5432 -U user -d db 호스트/포트로 연결
psql "postgresql://user:pass@host:5432/db" URI로 연결
\q psql 종료
\c dbname 다른 데이터베이스 연결
\password 비밀번호 변경

📋 메타 명령

\l 데이터베이스 나열
\dt 테이블 나열
\dt+ 크기와 함께 테이블 나열
\d tablename 테이블 설명
\d+ tablename 상세 테이블 설명
\dn 스키마 나열
\di 인덱스 나열
\dv 뷰 나열
\df 함수 나열
\du 사용자/역할 나열
\x 확장 표시 전환
\timing 쿼리 타이밍 전환

🔍 쿼리

📊 SELECT 쿼리

SELECT * FROM table_name; 모든 컬럼 선택
SELECT col1, col2 FROM table WHERE condition; 조건으로 선택
SELECT DISTINCT column FROM table; 고유 값 선택
SELECT * FROM table ORDER BY col ASC/DESC; 결과 정렬
SELECT * FROM table LIMIT 10 OFFSET 20; 페이지네이션
SELECT * FROM table WHERE col LIKE '%pattern%'; 패턴 매칭
SELECT * FROM table WHERE col ILIKE '%pattern%'; 대소문자 무시 LIKE
SELECT * FROM table WHERE col IN (1, 2, 3); IN 절
SELECT * FROM table WHERE col BETWEEN 1 AND 10; BETWEEN 범위
SELECT * FROM table WHERE col IS NULL; NULL 확인

📈 집계

SELECT COUNT(*) FROM table; 행 수 세기
SELECT SUM(column) FROM table; 값 합계
SELECT AVG(column) FROM table; 평균 값
SELECT MIN(column), MAX(column) FROM table; 최소 및 최대
SELECT category, COUNT(*) FROM table GROUP BY category; 그룹화
SELECT category, COUNT(*) FROM table GROUP BY category HAVING COUNT(*) > 5; 필터가 있는 그룹

🔗 조인

SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.t1_id; 내부 조인
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.t1_id; 왼쪽 외부 조인
SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.t1_id; 오른쪽 외부 조인
SELECT * FROM t1 FULL OUTER JOIN t2 ON t1.id = t2.t1_id; 완전 외부 조인
SELECT * FROM t1 CROSS JOIN t2; 교차 조인 (카테시안)
SELECT * FROM t1 JOIN t2 USING (common_col); 공통 컬럼으로 조인
SELECT * FROM t1 NATURAL JOIN t2; 자연 조인

✏️ 데이터 수정

INSERT

INSERT INTO table (col1, col2) VALUES ('val1', 'val2'); 단일 행 삽입
INSERT INTO table (col1, col2) VALUES ('a', 1), ('b', 2); 여러 행 삽입
INSERT INTO table (col1, col2) VALUES ('val', 'val') RETURNING *; 삽입 후 반환
INSERT INTO t1 SELECT * FROM t2 WHERE condition; select로 삽입
INSERT INTO table (col1) VALUES ('val') ON CONFLICT (col1) DO NOTHING; 삽입 또는 무시
INSERT INTO table (col1, col2) VALUES ('val1', 1) ON CONFLICT (col1) DO UPDATE SET col2 = EXCLUDED.col2; 업서트

🔄 UPDATE & DELETE

UPDATE table SET col1 = 'value' WHERE condition; 행 업데이트
UPDATE table SET col1 = 'val1', col2 = 'val2' WHERE id = 1; 여러 컬럼 업데이트
UPDATE t1 SET col = t2.val FROM t2 WHERE t1.id = t2.id; 다른 테이블에서 업데이트
UPDATE table SET col = col + 1 WHERE id = 1 RETURNING *; 업데이트 후 반환
DELETE FROM table WHERE condition; 행 삭제
DELETE FROM table WHERE id IN (SELECT id FROM t2); 서브쿼리로 삭제
TRUNCATE TABLE table_name; 모든 행 삭제 (빠름)
TRUNCATE TABLE table_name RESTART IDENTITY; 잘라내기 및 시퀀스 재설정

🏗️ 스키마 & 테이블

📋 테이블 생성

CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, created_at TIMESTAMP DEFAULT NOW() ); 컬럼이 있는 테이블 생성
CREATE TABLE IF NOT EXISTS table_name (...); 존재하지 않으면 생성
CREATE TABLE child ( id SERIAL PRIMARY KEY, parent_id INT REFERENCES parent(id) ON DELETE CASCADE ); 외래 키 제약
CREATE TABLE t (CHECK (col > 0)); 체크 제약

🔧 테이블 수정

ALTER TABLE t ADD COLUMN col VARCHAR(50); 컬럼 추가
ALTER TABLE t DROP COLUMN col; 컬럼 삭제
ALTER TABLE t ALTER COLUMN col TYPE INTEGER; 컬럼 타입 변경
ALTER TABLE t ALTER COLUMN col SET NOT NULL; NOT NULL 추가
ALTER TABLE t ALTER COLUMN col SET DEFAULT value; 기본값 설정
ALTER TABLE t RENAME COLUMN old TO new; 컬럼 이름 변경
ALTER TABLE old_name RENAME TO new_name; 테이블 이름 변경
DROP TABLE table_name; 테이블 삭제
DROP TABLE IF EXISTS table_name CASCADE; 의존성과 함께 삭제

📇 인덱스

CREATE INDEX idx_name ON table(column); 인덱스 생성
CREATE UNIQUE INDEX idx ON table(col); 유니크 인덱스 생성
CREATE INDEX idx ON table(col1, col2); 복합 인덱스
CREATE INDEX idx ON table(col) WHERE condition; 부분 인덱스
CREATE INDEX CONCURRENTLY idx ON table(col); 비차단 인덱스
DROP INDEX index_name; 인덱스 삭제
REINDEX TABLE table_name; 인덱스 재구성

🚀 고급 기능

🪟 윈도우 함수

SELECT col, ROW_NUMBER() OVER (ORDER BY col) FROM t; 행 번호
SELECT col, RANK() OVER (PARTITION BY cat ORDER BY val DESC) FROM t; 파티션 내 순위
SELECT col, LAG(col) OVER (ORDER BY date) FROM t; 이전 행 값
SELECT col, LEAD(col) OVER (ORDER BY date) FROM t; 다음 행 값
SELECT col, SUM(val) OVER (ORDER BY date) AS running_total FROM t; 누계
SELECT col, AVG(val) OVER (ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) FROM t; 이동 평균

🔄 CTE & 서브쿼리

WITH cte AS ( SELECT * FROM table WHERE condition ) SELECT * FROM cte; 공통 테이블 표현식
WITH RECURSIVE tree AS ( SELECT id, parent_id, name FROM t WHERE parent_id IS NULL UNION ALL SELECT t.id, t.parent_id, t.name FROM t JOIN tree ON t.parent_id = tree.id ) SELECT * FROM tree; 재귀 CTE
SELECT * FROM (SELECT * FROM t WHERE col > 5) AS subq; 파생 테이블
SELECT * FROM t WHERE col IN (SELECT col FROM t2); WHERE의 서브쿼리

📦 JSON 지원

SELECT data->'key' FROM table; JSON 필드 가져오기 (JSON)
SELECT data->>'key' FROM table; JSON 필드 가져오기 (텍스트)
SELECT data#>'{nested,key}' FROM table; 중첩 JSON 경로 가져오기
SELECT * FROM t WHERE data @> '{"key": "val"}'; JSON 포함
SELECT jsonb_agg(column) FROM table; JSON 배열로 집계
SELECT * FROM jsonb_each('{"a":1,"b":2}'); JSON 객체 확장

🔐 트랜잭션

BEGIN; UPDATE ... ; COMMIT; 기본 트랜잭션
BEGIN; UPDATE ... ; ROLLBACK; 트랜잭션 롤백
BEGIN; SAVEPOINT sp1; UPDATE ... ; ROLLBACK TO sp1; COMMIT; 세이브포인트
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 격리 수준 설정

🛠️ 관리

👤 사용자 & 권한

CREATE USER username WITH PASSWORD 'pass'; 사용자 생성
CREATE ROLE rolename; 역할 생성
GRANT SELECT, INSERT ON table TO user; 권한 부여
GRANT ALL PRIVILEGES ON DATABASE db TO user; 데이터베이스 전체 권한 부여
REVOKE INSERT ON table FROM user; 권한 취소
ALTER USER username WITH PASSWORD 'newpass'; 비밀번호 변경
DROP USER username; 사용자 삭제

💾 백업 & 복원

pg_dump dbname > backup.sql 데이터베이스 백업
pg_dump -Fc dbname > backup.dump 커스텀 형식 백업
pg_dump -t table dbname > table.sql 단일 테이블 백업
pg_dumpall > all_dbs.sql 모든 데이터베이스 백업
psql dbname < backup.sql SQL에서 복원
pg_restore -d dbname backup.dump 덤프에서 복원

📊 성능

EXPLAIN SELECT * FROM table; 쿼리 계획 표시
EXPLAIN ANALYZE SELECT * FROM table; 실행 및 타이밍 표시
VACUUM table_name; 스토리지 회수
VACUUM ANALYZE table_name; Vacuum 및 통계 업데이트
ANALYZE table_name; 통계 업데이트
SELECT pg_size_pretty(pg_database_size('dbname')); 데이터베이스 크기
SELECT pg_size_pretty(pg_table_size('table')); 테이블 크기

💡 팁 & 모범 사례

유용한 팁

  • EXPLAIN ANALYZE 사용: 항상 느린 쿼리 분석
  • 외래 키 인덱스: JOIN에 사용되는 컬럼 인덱스
  • JSON 대신 JSONB 사용: JSONB가 더 빠르고 인덱싱 가능
  • 연결 풀링: 연결 풀링에 PgBouncer 사용
  • 정기적인 VACUUM: 정기적인 VACUUM ANALYZE 예약
  • 트랜잭션 사용: 관련 작업을 트랜잭션으로 묶기
  • 부분 인덱스: 하위 집합에 인덱스의 WHERE 절 사용
  • SELECT * 피하기: 필요한 컬럼만 선택