Skill materialize-postgres-create
Crea una materialización de PostgreSQL para transmitir datos desde colecciones de Estuary hacia tablas de PostgreSQL usando flowctl.
- Estrellas en GitHub
- 7
- Archivos
- 1
- Último commit
- 4 nov 2026
- Licencia
- Apache-2.0
- Herramientas permitidas
- —
¿Qué hace la skill materialize-postgres-create?
materialize-postgres-create es una agent skill. Crea una materialización de PostgreSQL para transmitir datos desde colecciones de Estuary hacia tablas de PostgreSQL usando flowctl.
Resumen generado a partir del SKILL.md de la skill.
Sobre la skill materialize-postgres-create
Esta SKILL permite configurar PostgreSQL como destino para los datos capturados desde colecciones de Estuary. Guía a los desarrolladores a través de todo el proceso de creación de una materialización usando flowctl para transmitir datos hacia diversos entornos de PostgreSQL, incluyendo RDS, Aurora, Cloud SQL, Supabase, AlloyDB y Neon. El agente gestiona el flujo de trabajo, desde la recopilación de requisitos específicos como rutas de red y necesidades de SSL, hasta la generación del archivo de configuración flow.yaml necesario.
Cuando un agente carga esta SKILL, actúa como un asistente técnico que obtiene la documentación oficial del conector mediante WebFetch y consulta el registro de conectores para asegurar que se utilice el tag de imagen correcto. Ayuda a los usuarios a navegar por tareas de configuración complejas como configurar túneles SSH, gestionar hard deletes o habilitar delta updates para logs de eventos. La SKILL también proporciona advertencias específicas sobre connection poolers como PgBouncer o PgCat, que son incompatibles con los requisitos de nivel de sesión del conector. Una vez que la configuración está lista, el agente ayuda a publicar la especificación y a verificar el estado mediante comandos de flowctl.
Lo que un agente puede hacer con ella
- 1Configurar un destino de PostgresConfigura una materialización para transmitir datos desde colecciones de Estuary hacia una base de datos PostgreSQL específica.
- 2Evitar errores de connection poolerIdentifica si un usuario está intentando usar un connection pooler como Supabase o Neon que causará fallos en el conector.
- 3Generar un archivo de configuración de flujoConstruye un archivo flow.yaml válido que contenga el endpoint, la imagen del conector y los bindings necesarios para la materialización.
- 4Solucionar problemas de conexión y permisosResuelve errores comunes como tiempos de espera de conexión, fallos de autenticación o denegación de permisos de esquema.
Escrito a partir del SKILL.md de la skill. Cada caso de uso se verifica con una cita del mismo.
Cómo instalar la skill materialize-postgres-create
Cada comando copia la carpeta de la skill al directorio de skills del cliente. Reinicia el cliente o inicia una nueva sesión para cargarla.Instalar la skill materialize-postgres-create en Plugin
/plugin marketplace add estuary/agent-skills /plugin install estuary-materializations@estuary
Instalar la skill materialize-postgres-create en Claude Code
~/.claude/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.claude/skills/materialize-postgres-createInstalar la skill materialize-postgres-create en Claude Code (project)
.claude/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create .claude/skills/materialize-postgres-createInstalar la skill materialize-postgres-create en Codex
~/.agents/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.agents/skills/materialize-postgres-createInstalar la skill materialize-postgres-create en Gemini CLI
~/.gemini/skills/materialize-postgres-create/SKILL.md
$ npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.gemini/skills/materialize-postgres-createInstalar la skill materialize-postgres-create en Claude.ai
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
Ver en GitHubCreate 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
Archivos de esta skill
1Preguntas sobre la skill materialize-postgres-create
¿Cómo instalo la skill materialize-postgres-create en Claude Code?
Ejecuta npx degit estuary/agent-skills/skills/materialize-postgres-create ~/.claude/skills/materialize-postgres-create. Claude Code carga las skills desde ~/.claude/skills (todos los proyectos) o .claude/skills (un proyecto) y usa una skill cuando su descripción coincide con la tarea.
¿Qué clientes pueden usar la skill materialize-postgres-create?
Cualquier cliente que lea el formato Agent Skills: Claude Code, Codex, Gemini CLI y claude.ai (subir como ZIP). Los scripts de la skill se ejecutan solo donde el cliente permite la ejecución de código.
¿Puedo usar connection poolers como PgBouncer o el pooler de Supabase con este conector?
No, los connection poolers no son compatibles porque el conector utiliza tablas temporales a nivel de sesión y prepared statements que fallan con conexiones agrupadas.
¿Cómo gestiono las filas eliminadas en la tabla de destino?
Por defecto, las filas eliminadas permanecen en el destino marcadas con un flag de metadatos. Debes habilitar 'hard deletes' para eliminarlas físicamente.
¿Cómo puedo transmitir datos como un log de eventos de solo inserción (append-only) en lugar de un merge estándar?
Puedes habilitar 'delta updates' para cambiar del modo de una fila por clave al modo append-only.