本文へ移動
cccskills
無料GitHub で公開

pg_dump Reference

Consult PostgreSQL's pg_dump implementation for guidance on system catalog queries and schema extraction when implementing pgschema features

インストール方法を見る

含まれるファイル(2)

  • SKILL.md8.6 KB
  • metadata.json568 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

pg_dump Reference

Use this skill when implementing or debugging pgschema features that involve extracting schema information from PostgreSQL databases. pg_dump is the canonical PostgreSQL schema dumping tool and serves as a reference implementation for how to query system catalogs correctly.

When to Use This Skill

Invoke this skill when:

  • Adding support for new PostgreSQL schema objects
  • Debugging system catalog queries in ir/inspector.go
  • Understanding how PostgreSQL represents objects internally
  • Handling version-specific PostgreSQL features (versions 14-17)
  • Learning correct DDL formatting patterns
  • Understanding object dependency relationships

Source Code Locations

Main pg_dump repository: https://github.com/postgres/postgres/blob/master/src/bin/pg_dump/

Key files to reference:

  • pg_dump.c - Main implementation with system catalog queries
  • pg_dump.h - Data structures and function declarations
  • pg_dump_sort.c - Dependency sorting logic
  • pg_backup_archiver.c - Output formatting
  • common.c - Shared utility functions for querying system catalogs

Step-by-Step Workflow

1. Identify the Schema Object

Determine which PostgreSQL object type you're working with:

  • Tables and columns
  • Constraints (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK)
  • Indexes (regular, unique, partial, functional)
  • Triggers (including WHEN conditions, constraint triggers)
  • Views and materialized views
  • Functions and procedures
  • Sequences
  • Types (enum, composite, domain)
  • Policies (row-level security)
  • Aggregates
  • Comments

2. Find the Relevant pg_dump Function

Search pg_dump.c for the function that handles your object type:

Object Typepg_dump FunctionSystem Catalogs Used
Tables & ColumnsgetTables()pg_class, pg_attribute, pg_type
IndexesgetIndexes()pg_index, pg_class
TriggersgetTriggers()pg_trigger, pg_proc
FunctionsgetFuncs()pg_proc
ProceduresgetProcs()pg_proc
ViewsgetViews()pg_class, pg_rewrite
Materialized ViewsgetMatViews()pg_class
SequencesgetSequences()pg_sequence, pg_class
ConstraintsgetConstraints()pg_constraint
PoliciesgetPolicies()pg_policy
AggregatesgetAggregates()pg_aggregate, pg_proc
TypesgetTypes()pg_type
CommentsgetComments()pg_description

3. Analyze the System Catalog Query

Examine the SQL query used by pg_dump:

  • Which system catalog tables are joined
  • Which columns are selected
  • How version-specific features are handled
  • How PostgreSQL internal functions are used (pg_get_expr, pg_get_constraintdef, etc.)

Example - Extracting trigger WHEN conditions:

-- pg_dump's approach (from getTriggers):
SELECT t.tgname,
       pg_get_expr(t.tgqual, t.tgrelid, false) as when_clause
FROM pg_catalog.pg_trigger t
WHERE t.tgqual IS NOT NULL

Note: information_schema.triggers.action_condition is NOT reliable for WHEN clauses. Always use pg_get_expr(t.tgqual, ...) from pg_catalog.pg_trigger.

4. Check for Special Cases

Look for how pg_dump handles:

  • Version compatibility: Different queries for different PostgreSQL versions
  • NULL handling: How missing values are interpreted
  • Default values: System vs. user-defined defaults
  • Internal objects: Filtering out system-generated objects
  • Dependencies: How object relationships are tracked

5. Adapt for pgschema

Apply the pattern to pgschema's codebase:

For database introspection (ir/inspector.go):

  • Adapt the system catalog query for Go/pgx
  • Use pgx parameter binding for safety
  • Handle NULL values appropriately
  • Add proper error handling

For SQL parsing (ir/parser.go):

  • Understand how pg_dump formats DDL
  • Use pg_query_go to parse SQL statements
  • Extract relevant fields into IR structures

For DDL generation (internal/diff/*.go):

  • Follow pg_dump's quoting rules
  • Use PostgreSQL functions for formatting complex expressions
  • Handle version-specific syntax

Key System Catalog Tables

Core Tables

  • pg_class - Tables, indexes, views, sequences
  • pg_attribute - Table columns
  • pg_type - Data types
  • pg_constraint - Constraints (PK, FK, UNIQUE, CHECK)
  • pg_index - Index definitions

Functions & Triggers

  • pg_proc - Functions, procedures, trigger functions
  • pg_trigger - Trigger definitions
  • pg_aggregate - Aggregate function definitions

Access Control

  • pg_policy - Row-level security policies

Metadata

  • pg_description - Comments on database objects
  • pg_depend - Object dependencies

Helper Functions

  • pg_get_expr(expr, relation, pretty) - Deparse expressions
  • pg_get_constraintdef(constraint_oid, pretty) - Get constraint definition
  • pg_get_indexdef(index_oid, column, pretty) - Get index definition
  • pg_get_triggerdef(trigger_oid, pretty) - Get trigger definition

Important Considerations

pgschema is NOT pg_dump

Key differences:

  • Format: pgschema outputs declarative schema files for editing, pg_dump creates archive dumps for restore
  • Scope: pgschema focuses on single-schema objects, pg_dump handles entire databases
  • Workflow: pgschema supports plan/apply (Terraform-style), pg_dump is dump/restore only
  • Normalization: pgschema normalizes for comparison, pg_dump preserves exact format

When NOT to Copy pg_dump

Don't blindly copy pg_dump for:

  • Output formatting (pgschema has different conventions)
  • Archive/restore logic (not applicable to pgschema)
  • Full database dumps (pgschema is schema-focused)
  • Ancient version support (pgschema supports PostgreSQL 14+)

When pg_dump is Authoritative

Always reference pg_dump for:

  • System catalog query patterns
  • Understanding PostgreSQL internals
  • Correct use of pg_get_* functions
  • Version-specific feature detection
  • Object dependency tracking

Examples

Example 1: Extracting Generated Column Information

pg_dump approach:

SELECT a.attname,
       a.attgenerated,
       pg_get_expr(ad.adbin, ad.adrelid) as generation_expr
FROM pg_attribute a
LEFT JOIN pg_attrdef ad ON (a.attrelid = ad.adrelid AND a.attnum = ad.adnum)
WHERE a.attgenerated != ''

pgschema adaptation (in ir/inspector.go):

query := `
SELECT a.attname,
       a.attgenerated,
       pg_get_expr(ad.adbin, ad.adrelid) as generation_expr
FROM pg_attribute a
LEFT JOIN pg_attrdef ad ON (a.attrelid = ad.adrelid AND a.attnum = ad.adnum)
WHERE a.attrelid = $1 AND a.attgenerated != ''
`
rows, err := conn.Query(ctx, query, tableOID)

Example 2: Handling Partial Indexes

pg_dump extracts WHERE clauses:

SELECT pg_get_expr(i.indpred, i.indrelid, true) as index_predicate
FROM pg_index i
WHERE i.indpred IS NOT NULL

pgschema stores in IR (ir/ir.go):

type Index struct {
    Name      string
    Columns   []string
    Predicate string  // WHERE clause for partial indexes
    // ...
}

Tips for Success

  1. Search strategically: Clone postgres repo and use grep/ag to search for specific system catalog columns or keywords

  2. Check git history: Use git log -p or GitHub blame to see when features were added and understand the evolution

  3. Read comments carefully: pg_dump.c contains valuable comments explaining PostgreSQL internals and edge cases

  4. Cross-reference documentation: Always combine pg_dump source with official PostgreSQL documentation:

  5. Test incrementally: After adapting from pg_dump, test against real PostgreSQL instances using pgschema's embedded-postgres integration tests

  6. Version awareness: Check how pg_dump handles version differences - pgschema supports PostgreSQL 14-17, so you may need conditional logic

Verification Checklist

After consulting pg_dump and implementing in pgschema:

  • System catalog query correctly extracts all necessary fields
  • NULL values are handled appropriately
  • Version-specific features are detected and handled
  • Internal/system objects are filtered out
  • Dependencies are tracked correctly
  • Integration test added in testdata/diff/
  • Test passes with go test -v ./internal/diff -run TestDiffFromFiles
  • Test passes with go test -v ./cmd -run TestPlanAndApply
  • Tested against multiple PostgreSQL versions (14-17)

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Testing patterns for PHPUnit and Playwright E2E tests. Use when writing tests, debugging test failures, setting up test coverage, or implementing test patterns for ActivityPub features.

日本語の概要は準備中です。原文の説明を表示しています。

Microck/ordinary-claude-skills4052026年9月7日 更新

adaptyv

無料

Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding assays, expression testing, thermostability measurements, enzyme activity assays, or protein sequence optimization. Also use for submitting experiments via API, tracking experiment status, downloading results, optimizing protein sequences for better expression using computational tools (NetSolP, SoluProt, SolubleMPNN, ESM), or managing protein design workflows with wet-lab validation.

日本語の概要は準備中です。原文の説明を表示しています。

Microck/ordinary-claude-skills4052026年9月7日 更新

Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.

日本語の概要は準備中です。原文の説明を表示しています。

Microck/ordinary-claude-skills4052026年9月7日 更新

This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.

日本語の概要は準備中です。原文の説明を表示しています。

Microck/ordinary-claude-skills4052026年9月7日 更新

Master advanced AgentDB features including QUIC synchronization, multi-database management, custom distance metrics, hybrid search, and distributed systems integration. Use when building distributed AI systems, multi-agent coordination, or advanced vector search applications.

日本語の概要は準備中です。原文の説明を表示しています。

Microck/ordinary-claude-skills4052026年9月7日 更新

Create and train AI learning plugins with AgentDB's 9 reinforcement learning algorithms. Includes Decision Transformer, Q-Learning, SARSA, Actor-Critic, and more. Use when building self-learning agents, implementing RL, or optimizing agent behavior through experience.

日本語の概要は準備中です。原文の説明を表示しています。

Microck/ordinary-claude-skills4052026年9月7日 更新

Microck のスキルをすべて見る

このスキルの問題を報告する