materialize-postgres-create skill
flowctl을 사용하여 Estuary collection의 데이터를 PostgreSQL 테이블로 스트리밍하는 PostgreSQL materialization을 생성합니다.
- GitHub 스타
- 7
- 파일
- 1
- 마지막 커밋
- 2026년 11월 4일
- 라이선스
- Apache-2.0
- 허용된 도구
- —
materialize-postgres-create skill은 무엇을 하나요?
materialize-postgres-create은(는) agent skill입니다. flowctl을 사용하여 Estuary collection의 데이터를 PostgreSQL 테이블로 스트리밍하는 PostgreSQL materialization을 생성합니다.
skill의 SKILL.md에서 생성된 요약입니다.
materialize-postgres-create skill 정보
이 SKILL은 Estuary collection에서 캡처한 데이터를 PostgreSQL을 대상으로 설정할 수 있게 합니다. RDS, Aurora, Cloud SQL, Supabase, AlloyDB, Neon을 포함한 다양한 PostgreSQL 환경으로 데이터를 스트리밍하기 위해 flowctl을 사용하여 materialization을 생성하는 전체 과정을 안내합니다. 에이전트는 네트워크 경로 및 SSL 필요 사항과 같은 특정 요구 사항을 수집하는 것부터 필요한 flow.yaml 설정 파일을 생성하는 것까지 워크플로우를 관리합니다.
에이전트가 이 SKILL을 로드하면 WebFetch를 통해 공식 커넥터 문서를 가져오고 커넥터 레지스트리를 조회하여 올바른 image tag가 사용되는지 확인하는 기술 어시스턴트 역할을 수행합니다. SSH 터널 구성, hard deletes 관리, 또는 event log를 위한 delta updates 활성화와 같은 복잡한 설정 작업을 사용자가 수행할 수 있도록 돕습니다. 또한 커넥터의 세션 레벨 요구 사항과 호환되지 않는 PgBouncer 또는 PgCat과 같은 connection pooler에 대한 특정 경고를 제공합니다. 설정이 완료되면 에이전트는 spec 게시 및 flowctl 명령어를 통한 상태 확인을 지원합니다.
agent가 수행할 수 있는 작업
- 1Postgres 대상 구성Estuary collection의 데이터를 특정 PostgreSQL 데이터베이스로 스트리밍하는 materialization을 설정합니다.
- 2Connection pooler 오류 방지사용자가 커넥터 작동을 방해하는 Supabase 또는 Neon과 같은 connection pooler를 사용하려고 하는지 식별합니다.
- 3flow 설정 파일 생성materialization에 필요한 endpoint, connector image 및 bindings가 포함된 유효한 flow.yaml 파일을 생성합니다.
- 4연결 및 권한 문제 해결연결 타임아웃, 인증 실패 또는 스키마 권한 거부와 같은 일반적인 오류를 해결합니다.
skill의 SKILL.md를 기반으로 작성되었습니다. 모든 사용 사례는 해당 문서의 인용구와 대조 확인되었습니다.
materialize-postgres-create skill 설치 방법
각 명령은 skill 폴더를 클라이언트의 skills 디렉터리에 복사합니다. 클라이언트를 재시작하거나 새 세션을 시작하여 로드하세요.플러그인에 materialize-postgres-create skill 설치
/plugin marketplace add estuary/agent-skills /plugin install estuary-materializations@estuary
Claude Code에 materialize-postgres-create skill 설치
~/.claude/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.claude/skills/materialize-postgres-createClaude Code (project)에 materialize-postgres-create skill 설치
.claude/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create .claude/skills/materialize-postgres-createCodex에 materialize-postgres-create skill 설치
~/.agents/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.agents/skills/materialize-postgres-createGemini CLI에 materialize-postgres-create skill 설치
~/.gemini/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.gemini/skills/materialize-postgres-createClaude.ai에 materialize-postgres-create skill 설치
npx degit estuary/agent-skills/skills/materialize-postgres-create materialize-postgres-create && zip -r materialize-postgres-create.zip materialize-postgres-create # claude.ai → Customize → Skills → + → Create skill → Upload a skill → materialize-postgres-create.zip
SKILL.md
GitHub에서 보기Create PostgreSQL Materialization
Create a PostgreSQL materialization using flowctl to stream data from Estuary collections into PostgreSQL tables.
Applies to: materialize-postgres (all variants: vanilla, RDS, Aurora, Cloud SQL, Supabase, AlloyDB, Neon)
Step 0: Load Connector Documentation
Before proceeding, fetch the official connector docs for prerequisites, config reference, and setup instructions.
Load the docs page: https://docs.estuary.dev/reference/Connectors/materialization-connectors/PostgreSQL/
Use WebFetch to load this page. It covers:
- Prerequisites (user creation, permissions, schema setup)
- Full config property reference
- SSH tunnel configuration
- SSL configuration
- Advanced options (delta updates, hard deletes, sync schedule)
Search Kapa for tribal knowledge (if the Estuary MCP is configured):
Search kapa ai knowledge sources for "materialize postgres common issues"
If Kapa MCP is not configured, the user can set it up: https://docs.estuary.dev/features/mcp-integration/
This skill provides the flowctl workflow and troubleshooting that docs don't cover.
Step 1: Gather Requirements
Before writing any YAML, ask the user:
- Postgres variant? — Vanilla, RDS, Aurora, Cloud SQL, Supabase, AlloyDB
- Network path? — Direct connection (cloud-hosted with IP allowlist), SSH tunnel (private network/on-prem), or ngrok (local dev).
Connection poolers are NOT supported. If the user mentions Supabase, Neon, PgBouncer, or PgCat, warn them immediately:
- The connector uses session-level temporary tables and prepared statements that break with pooled connections.
- Supabase: Must use the Direct connection (
db.xxx.supabase.co:5432), not the pooler (xxx.pooler.supabase.com:6543). - Neon: Must use the non-pooler endpoint — remove
-poolerfrom the hostname.
- Non-default data plane? — Most users use the default. Ask if they need a non-default data plane.
- Target database and schema? — Database name, schema (default:
public) - Source collections? — Which Estuary collections to materialize
- SSL required? — Some cloud providers require SSL connections
- Hard deletes? — Off by default. Without it, deleted rows stay in the destination marked with
_meta/op: 'd'. Enable to physically remove them. - Delta updates? — Off by default. Switches from one-row-per-key (standard merge) to append-only. Use for event logs or history tables.
- Sync schedule? — Controls how often batches are written to the destination (default: 30 minutes,
0sfor real-time). Affects latency and destination compute cost.
Step 2: Find the Correct Connector Version
Always use the latest numbered version tag. Query the connector registry:
flowctl raw get --table connector_tags \
--query 'documentation_url=eq.https://go.estuary.dev/materialize-postgres' \
--query 'select=image_tag,documentation_url' \
--output yaml
Use the returned image_tag — never hardcode a version.
Step 3: Help User Complete Prerequisites
Walk the user through prerequisites from the docs loaded in Step 0:
- Database user — Create a user with write permissions on the target schema
- Schema permissions — USAGE and CREATE on target schema
- Table permissions — SELECT, INSERT, UPDATE, DELETE if materializing to existing tables
- Network access — Firewall rules or SSH tunnel configured
Refer to the docs page for exact SQL commands and cloud-specific instructions.
Step 4: Create the Spec File
Build flow.yaml using the config reference from the docs. Minimal required config:
materializations:
<TENANT>/<PATH>/materialize-postgres:
endpoint:
connector:
image: ghcr.io/estuary/materialize-postgres:<VERSION>
config:
address: "<HOST>:5432"
database: "<DATABASE>"
user: "<USERNAME>"
password: "<PASSWORD>"
schema: "<SCHEMA>"
bindings:
- source: <TENANT>/<collection-path>
resource:
table: "<TABLE_NAME>"
For SSH tunnel or SSL, add the appropriate config block — see docs for full reference.
Step 5: Publish
flowctl catalog publish --source flow.yaml --auto-approve
Step 6: Verify
# Check status
flowctl catalog status <TENANT>/<PATH>/materialize-postgres
# View logs
flowctl logs --task <TENANT>/<PATH>/materialize-postgres --since 5m | jq -c '{ts, message}'
Status progression:
PENDING— Normal for ~30 seconds during shard assignmentBACKFILLING— Initial data sync from collectionOK— Running normally with real-time updates
Troubleshooting
"connection refused" or timeout
Cause: Database not reachable from Estuary cloud
Fix:
- Verify firewall allows Estuary IP addresses (see docs)
- Check security groups (AWS) or firewall rules (GCP)
- Use SSH tunnel for private databases
- For local testing:
ngrok tcp 5432
"password authentication failed"
Cause: Incorrect credentials or user doesn't exist
Fix:
- Verify username and password
- Check user exists:
SELECT * FROM pg_user WHERE usename = '<user>'; - Verify user can connect from external hosts (check
pg_hba.conf)
"permission denied for schema"
Cause: User lacks permissions on target schema
Fix: Grant USAGE and CREATE on the target schema — see docs for SQL.
"relation already exists" or schema conflicts
Cause: Table already exists with incompatible schema
Fix:
- Drop and recreate the table
- Use a different table name
- Ensure collection schema matches existing table
Materialization stuck in PENDING
Wait 30-60 seconds — this is normal during shard assignment. If still stuck:
flowctl logs --task <TENANT>/<PATH>/materialize-postgres --since 5m | jq 'select(.level == "error")'
SSL connection errors
Cause: SSL mode mismatch or certificate issues
Fix:
- Try
sslmode: "require"first - For AWS RDS, SSL is usually required — use
verify-caorverify-full - For self-signed certs, use
requiremode - See docs for full SSL configuration options
SSH tunnel connection failures
Cause: SSH configuration issues
Fix:
- Verify bastion is reachable:
ssh -p 22 user@bastion - Check private key format (must be OpenSSH format)
- Verify bastion can reach database:
nc -zv db-host 5432 - See SSH tunnel troubleshooting docs
Related Skills
connector-disable-enable— Pause/restart existing materializationsconnector-delete-recreate— Nuclear option for stuck materializationsestuary-logs— Deep log analysisestuary-catalog-status— Status checking
이 스킬의 파일
1materialize-postgres-create skill 질문
Claude Code에 materialize-postgres-create skill을 어떻게 설치하나요?
npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.claude/skills/materialize-postgres-create를 실행합니다. Claude Code는 ~/.claude/skills(모든 프로젝트) 또는 .claude/skills(한 프로젝트)에서 skills를 로드하며, 설명이 작업과 일치할 때 skill을 사용합니다.
materialize-postgres-create skill을 사용할 수 있는 클라이언트는 무엇인가요?
Agent Skills 형식을 읽는 모든 클라이언트(Claude Code, Codex, Gemini CLI, claude.ai(ZIP으로 업로드))가 사용할 수 있습니다. skill 내 스크립트는 클라이언트가 코드 실행을 허용하는 경우에만 실행됩니다.
이 커넥터와 함께 PgBouncer 또는 Supabase pooler와 같은 connection pooler를 사용할 수 있나요?
아니요, connection pooler는 지원되지 않습니다. 커넥터가 세션 레벨의 임시 테이블과 prepared statements를 사용하므로 pooled connections 환경에서는 작동이 중단됩니다.
대상 테이블에서 삭제된 행은 어떻게 처리하나요?
기본적으로 삭제된 행은 메타데이터 플래그가 지정된 상태로 대상 테이블에 유지됩니다. 물리적으로 삭제하려면 'hard deletes'를 활성화해야 합니다.
표준 merge 방식 대신 append-only event log 방식으로 데이터를 스트리밍하려면 어떻게 하나요?
'delta updates'를 활성화하면 키당 한 행(one-row-per-key) 방식에서 append-only 모드로 전환할 수 있습니다.