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.zipInstalls 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.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
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 syntaxinternal/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
| Statement | Grammar Rule | Key Sub-rules |
|---|---|---|
| CREATE TABLE | CreateStmt | columnDef, TableConstraint, TableLikeClause |
| ALTER TABLE | AlterTableStmt | alter_table_cmd |
| CREATE INDEX | IndexStmt | index_elem (column, function, expression) |
| CREATE TRIGGER | CreateTrigStmt | TriggerActionTime, TriggerEvents, TriggerWhen |
| CREATE FUNCTION | CreateFunctionStmt | func_args, createfunc_opt_list |
| CREATE VIEW | ViewStmt | SelectStmt |
| CREATE SEQUENCE | CreateSeqStmt | OptSeqOptList |
| CREATE TYPE | CreateEnumStmt, CompositeTypeStmt, CreateDomainStmt | |
| CREATE POLICY | CreatePolicyStmt | row_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 optionsopt_*: 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:
- Column:
CREATE INDEX idx ON t (col) - Function:
CREATE INDEX idx ON t (lower(col)) - 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:
COMPRESSIONclause for tables - PG 15:
UNIQUE NULLS NOT DISTINCT - PG 16: SQL/JSON functions
- PG 17:
MERGEenhancements
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
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.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| postgresql-syntax-reference (this skill) | 1 | 5mo | Review | Advanced |
| drizzle-orm | 32 | 2mo | No flags | Intermediate |
| database-design | 6 | 6mo | Review | Intermediate |
| database-schema-designer | 6 | 6mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by pgschema
View all by pgschema →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.
database-design
davila7
Database design principles and decision-making. Schema design, indexing strategy, ORM selection, serverless databases.
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.
database-migrations-sql-migrations
sickn33
SQL database migrations with zero-downtime strategies for PostgreSQL, MySQL, SQL Server
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.
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.