PO

postgresql-syntax-reference

Consults the internal PostgreSQL gram.y and scan.l files to ensure SQL syntax correctness.

Install

mkdir -p .claude/skills/postgresql-syntax-reference && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4276" && unzip -o skill.zip -d .claude/skills/postgresql-syntax-reference && rm skill.zip

Installs to .claude/skills/postgresql-syntax-reference

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Consult PostgreSQL's parser and grammar (gram.y) to understand SQL syntax, DDL statement structure, and parsing rules when implementing pgschema features. Use this skill when generating DDL in internal/diff/*.go, validating SQL syntax, understanding keyword precedence, or learning how PostgreSQL handles specific constructs like triggers, indexes, generated columns, or constraint triggers.
391 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

Key capabilities

  • Reference PostgreSQL grammar rules for DDL generation
  • Validate SQL syntax against internal gram.y definitions
  • Identify keyword precedence and reserved status
  • Analyze DDL structure for triggers, indexes, and constraints

How it works

The skill consults local PostgreSQL grammar files to provide accurate syntax structure and keyword information for generating or validating DDL.

Inputs & outputs

You give it
SQL statement or DDL construct
You get back
Grammar rule reference and syntax validation

When to use postgresql-syntax-reference

  • Validating generated SQL syntax
  • Understanding trigger or index grammar
  • Implementing schema migration logic

About this skill

PostgreSQL Syntax Reference

Reference PostgreSQL's grammar to understand SQL syntax and generate correct DDL.

Source Files

Local copies (preferred):

  • internal/gram.y - Yacc/Bison grammar defining all PostgreSQL SQL syntax
  • internal/scan.l - Flex lexer for tokenization

Searching the grammar:

grep -n "CreateTrigStmt:" internal/gram.y     # Find statement rule
grep -A 10 "TriggerWhen:" internal/gram.y     # Understand an option

Statement Types → Grammar Rules

StatementGrammar RuleKey Sub-rules
CREATE TABLECreateStmtcolumnDef, TableConstraint, TableLikeClause
ALTER TABLEAlterTableStmtalter_table_cmd
CREATE INDEXIndexStmtindex_elem (column, function, expression)
CREATE TRIGGERCreateTrigStmtTriggerActionTime, TriggerEvents, TriggerWhen
CREATE FUNCTIONCreateFunctionStmtfunc_args, createfunc_opt_list
CREATE VIEWViewStmtSelectStmt
CREATE SEQUENCECreateSeqStmtOptSeqOptList
CREATE TYPECreateEnumStmt, CompositeTypeStmt, CreateDomainStmt
CREATE POLICYCreatePolicyStmtrow_security_cmd

Grammar Syntax Guide

gram.y uses Yacc/Bison notation:

  • UPPERCASE: Terminal tokens (keywords like CREATE, TRIGGER)
  • lowercase: Non-terminal rules (references to other grammar rules)
  • |: Alternative syntax options
  • opt_*: Optional elements (can be empty)
  • *_list: Recursive list constructs

Example:

CreateTrigStmt:
    CREATE opt_or_replace TRIGGER name TriggerActionTime TriggerEvents ON
    qualified_name TriggerReferencing TriggerForSpec TriggerWhen
    EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')'

Key Constructs for pgschema

Column Definitions

  • Regular: column_name type [constraints]
  • Generated: column_name type GENERATED ALWAYS AS (expr) STORED
  • Identity: column_name type GENERATED {ALWAYS|BY DEFAULT} AS IDENTITY

Index Elements

Three forms — note extra parens for arbitrary expressions:

  1. Column: CREATE INDEX idx ON t (col)
  2. Function: CREATE INDEX idx ON t (lower(col))
  3. Expression: CREATE INDEX idx ON t ((col + 1))

Trigger WHEN Clause

TriggerWhen:
    WHEN '(' a_expr ')'
    | /* EMPTY */

Constraint Triggers

CREATE opt_or_replace CONSTRAINT TRIGGER name ...
    -- Can be DEFERRABLE / NOT DEFERRABLE
    -- Can be INITIALLY DEFERRED / INITIALLY IMMEDIATE

Table LIKE Clause

LIKE qualified_name [INCLUDING|EXCLUDING] {COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|GENERATED|INDEXES|STATISTICS|STORAGE|ALL}

Operator Precedence (from gram.y top)

%left OR
%left AND
%right NOT
%nonassoc IS ISNULL NOTNULL
%nonassoc '<' '>' '=' LESS_EQUALS GREATER_EQUALS NOT_EQUALS

Keywords

  • Reserved: Cannot be identifiers without quoting (SELECT, TABLE, CREATE)
  • Unreserved: Can be used as identifiers (ABORT, ACCESS, ACTION)

When generating DDL, quote identifiers that match reserved keywords.

Version Differences (14-18)

  • PG 14: COMPRESSION clause for tables
  • PG 15: UNIQUE NULLS NOT DISTINCT
  • PG 16: SQL/JSON functions
  • PG 17: MERGE enhancements

Check gram.y git history to see when features were added. Add version detection in pgschema if needed.

Applying to pgschema

When generating DDL in internal/diff/*.go:

  • Follow gram.y syntax exactly for keyword ordering
  • Include all required elements
  • Quote identifiers correctly via ir/quote.go
  • Test generated DDL against real PostgreSQL via integration tests

When not to use it

  • General SQL query execution or database administration

Prerequisites

internal/gram.yinternal/scan.l

Limitations

  • Limited to PostgreSQL syntax and grammar rules
  • Requires local access to gram.y and scan.l files

How it compares

It uses the actual PostgreSQL parser grammar rather than relying on generic SQL documentation.

Compared to similar skills

postgresql-syntax-reference side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
postgresql-syntax-reference (this skill)15moReviewAdvanced
drizzle-orm322moNo flagsIntermediate
database-design66moReviewIntermediate
database-schema-designer66moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

drizzle-orm

EpicenterHQ

Drizzle ORM patterns for type branding and custom types. Use when working with Drizzle column definitions, branded types, or custom type conversions.

32190

database-design

davila7

Database design principles and decision-making. Schema design, indexing strategy, ORM selection, serverless databases.

648

database-schema-designer

davila7

Design robust, scalable database schemas for SQL and NoSQL databases. Provides normalization guidelines, indexing strategies, migration patterns, constraint design, and performance optimization. Ensures data integrity, query performance, and maintainable data models.

628

database-migrations-sql-migrations

sickn33

SQL database migrations with zero-downtime strategies for PostgreSQL, MySQL, SQL Server

318

databases

mrgoonie

Work with MongoDB (document database, BSON documents, aggregation pipelines, Atlas cloud) and PostgreSQL (relational database, SQL queries, psql CLI, pgAdmin). Use when designing database schemas, writing queries and aggregations, optimizing indexes for performance, performing database migrations, configuring replication and sharding, implementing backup and restore strategies, managing database users and permissions, analyzing query performance, or administering production databases.

16

migrate-postgres-tables-to-hypertables

timescale

Use this skill to migrate identified PostgreSQL tables to Timescale/TimescaleDB hypertables with optimal configuration and validation. **Trigger when user asks to:** - Migrate or convert PostgreSQL tables to hypertables - Execute hypertable migration with minimal downtime - Plan blue-green migration for large tables - Validate hypertable migration success - Configure compression after migration **Prerequisites:** Tables already identified as candidates (use find-hypertable-candidates first if needed) **Keywords:** migrate to hypertable, convert table, Timescale, TimescaleDB, blue-green migration, in-place conversion, create_hypertable, migration validation, compression setup Step-by-step migration planning including: partition column selection, chunk interval calculation, PK/constraint handling, migration execution (in-place vs blue-green), and performance validation queries.

14

Search skills

Search the agent skills registry