스킬 postgresql
📦

postgresql

안전

PostgreSQL 데이터베이스 스키마 설계

또한 다음에서 사용할 수 있습니다: 2025Emma,2025Emma

데이터베이스 스키마 설계 오류는 성능 문제와 데이터 무결성 문제를 일으킵니다. 이 스킬은 데이터 타입, 인덱스, 제약조건 및 확장성 패턴에 대한 PostgreSQL 전용 모범 사례를 제공합니다.

지원: Claude Codex Code(CC)
📊 71 적절함
1

스킬 ZIP 다운로드

2

Claude에서 업로드

설정 → 기능 → 스킬 → 스킬 업로드로 이동

3

토글을 켜고 사용 시작

테스트해 보기

"postgresql" 사용 중입니다. 이메일, 이름 및 타임스탬프가 있는 users 테이블을 설계하세요

예상 결과:

  • CREATE TABLE users (
  • user_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  • email TEXT NOT NULL UNIQUE,
  • name TEXT NOT NULL,
  • created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  • updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
  • );
  • CREATE UNIQUE INDEX ON users (LOWER(email));

"postgresql" 사용 중입니다. 기본 키에 UUID 를 사용해야 할까요 BIGINT 를 사용해야 할까요?

예상 결과:

  • 다음과 같은 경우 BIGINT GENERATED ALWAYS AS IDENTITY 를 사용하세요:
  • - 순차 ID 가 허용되는 경우
  • - 인덱스 성능이 중요한 경우
  • - 더 작은 인덱스 크기가 필요한 경우
  •  
  • 다음과 같은 경우 UUID 를 사용하세요:
  • - 전역 고유성이 필요한 경우
  • - ID 비공개가 보안 요구사항인 경우
  • - 여러 소스의 데이터를 병합하는 경우

보안 감사

안전
v1 • 2/24/2026

All 221 static analyzer findings were determined to be false positives. The skill consists entirely of markdown documentation (SKILL.md) with no executable code. Backtick characters are markdown formatting for code examples, not shell execution. References to security features like Row Level Security are PostgreSQL documentation, not Windows SAM access. The skill provides educational guidance for database schema design with no security risks.

1
스캔된 파일
233
분석된 줄 수
0
발견 사항
1
총 감사 수
보안 문제를 찾지 못했습니다
감사자: claude

품질 점수

38
아키텍처
100
유지보수성
87
콘텐츠
32
커뮤니티
100
보안
91
사양 준수

만들 수 있는 것

새 애플리케이션 스키마 설계

적절한 데이터 타입, 기본 키, 외래 키 관계 및 일반적인 쿼리 패턴에 대한 인덱스를 갖춘 새 웹 애플리케이션을 위한 완전한 데이터베이스 스키마를 설계합니다.

스키마 검토 및 최적화

기존 테이블 설계를 검토하여 성능 문제, 누락된 인덱스, 부적절한 데이터 타입 또는 데이터 무결성 문제를 일으킬 수 있는 제약조건 격차를 확인합니다.

마이그레이션 계획

트랜잭션 DDL, 동시 인덱스 생성 및 다운타임 없이 대형 테이블에 컬럼을 추가하기 위한 전략으로 안전한 스키마 진화를 계획합니다.

이 프롬프트를 사용해 보세요

기본 테이블 설계
이메일, 이름, 등록일 및 선택적 프로필 설정을 위한 필드가 있는 사용자 프로필 저장용 PostgreSQL 테이블을 설계하세요. 적절한 데이터 타입과 제약조건을 사용하세요.
인덱스 전략
id, user_id, status, created_at 컬럼이 있는 queries 테이블이 있습니다. 일반적인 쿼리는 user_id 와 status 로 필터링하고 created_at 내림차순으로 정렬합니다. 인덱싱 전략을 권장하세요.
JSONB 설계 결정
제품 속성을 JSONB 컬럼에 저장해야 할까요 아니면 별도의 컬럼을 만들어야 할까요? 속성은 제품 카테고리에 따라 다르며 사용자는 특정 속성으로 자주 검색합니다.
대형 테이블 파티셔닝
월 1000 만 행씩 증가하는 events 테이블이 있습니다. 쿼리는 일반적으로 event_date 와 device_id 로 필터링합니다. 파티셔닝 전략을 권장하고 장단점을 설명하세요.

모범 사례

  • 타임존 혼동을 방지하기 위해 모든 이벤트 타임스탬프에 TIMESTAMP 대신 TIMESTAMPTZ 를 사용하세요
  • PostgreSQL 은 외래 키 컬럼을 자동으로 인덱싱하지 않으므로 명시적 인덱스를 추가하세요
  • 먼저 3NF 로 정규화한 다음 검증된 높은 ROI 의 읽기 성능 향상이 있는 경우에만 비정규화하세요

피하기

  • CHECK 제약조건이 있는 TEXT 대신 길이 제한이 있는 VARCHAR 사용
  • 실제 쿼리 패턴을 분석하지 않고 모든 컬럼에 인덱스 생성
  • 자동 증가 컬럼에 GENERATED ALWAYS AS IDENTITY 대신 SERIAL 사용

자주 묻는 질문

문자열 컬럼에 TEXT 와 VARCHAR 중 무엇을 사용해야 할까요?
대부분의 경우 TEXT 를 사용하세요. PostgreSQL 은 TEXT 와 VARCHAR 를 동일하게 저장합니다. 길이 검증이 필요한 경우 VARCHAR(n) 대신 CHECK 제약조건을 추가하세요.
외래 키 컬럼을 인덱싱해야 할까요?
그렇습니다. PostgreSQL 은 FK 컬럼을 자동으로 인덱싱하지 않습니다. 조인 성능을 향상시키고 부모 행 삭제 시 잠금 문제를 방지하기 위해 FK 컬럼에 명시적 인덱스를 추가하세요.
일반 컬럼 대신 JSONB 를 언제 사용해야 할까요?
선택적, 가변적 또는 반정형 속성의 경우 JSONB 를 사용하세요. 핵심 관계형 데이터는 일반 컬럼에 유지하세요. 포함 쿼리를 위해 JSONB 컬럼에 GIN 인덱스를 항상 추가하세요.
TIMESTAMP 와 TIMESTAMPTZ 의 차이점은 무엇인가요?
TIMESTAMPTZ 는 타임존 인식을 가진 타임스탬프를 저장하며 내부적으로 UTC 로 변환합니다. TIMESTAMP 는 타임존 컨텍스트 없이 리터럴 값을 저장합니다. 타임존 버그를 방지하기 위해 항상 TIMESTAMPTZ 를 사용하세요.
테이블을 파티셔닝해야 할까요?
쿼리가 date 와 같은 파티션 키로 일관되게 필터링하는 1 억 행을 초과하는 테이블의 경우 파티셔닝을 고려하세요. 파티셔닝은 복잡성을 추가하므로 명확한 이점이 있는 경우에만 사용하세요.
대형 테이블에 NOT NULL 컬럼을 안전하게 추가하려면 어떻게 해야 할까요?
먼저 컬럼을 NULL 로 추가한 다음 데이터를 백필하고 NOT NULL 로 변경하세요. now() 와 같은 변동성 있는 기본값과 함께 NOT NULL 을 추가하면 전체 테이블 재작성이 발생합니다. 비변동성 기본값 또는 다단계 마이그레이션을 사용하세요.

개발자 세부 정보

파일 구조

📄 SKILL.md