Token导航 LogoToken导航

Agent Skill · 研究检索

postgresql-syntax-reference(PostgreSQL syntax reference 搜索)

用于辅助数据库表结构、查询语句、迁移脚本和数据维护任务。它适合让 Agent 分析 schema、编写 SQL、排查查询问题、整理索引或生成迁移建议。使用时需要明确数据库类型、连接环境和目标表,区分只读分析与写入变更;涉及删除、更新、迁移和批量导入时,应优先 dry-run、备份或事务保护,避免误操作。

postgresql-syntax-reference 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为执行命令;许可证信息还不明确,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 8,734。

总安装 15,741周安装 691GitHub Stars 851下载 4,686核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:postgresql-syntax-reference(PostgreSQL syntax reference 搜索)
来源仓库:https://github.com/pgschema/pgschema
仓库路径:skills/postgresql-syntax-reference
安装命令:
npx skills add https://github.com/pgschema/pgschema --skill 'PostgreSQL Syntax Reference'
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/pgschema/pgschema --skill 'PostgreSQL Syntax Reference'

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

提供 PostgreSQL 语法快速检索与参考支持。postgresql-syntax-reference 属于研究检索类 Skill,可作为该场景下的辅助能力补充。适用于需要查阅 SQL 关键字、函数用法或结构定义的开发场景。通过关键词搜索定位语法要点,辅助编写正确且高效的查询语句。

安装依赖 GitHub 仓库,宿主环境包括主流 AI 编程工具。建议结合具体业务逻辑验证语法适用性,避免盲目套用示例。

来源仓库内路径:skills/postgresql-syntax-reference

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/pgschema/pgschema --skill 'PostgreSQL Syntax R…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要执行命令,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

postgresql-syntax-reference 怎么安装?

在终端执行 npx skills add https://github.com/pgschema/pgschema --skill 'PostgreSQL Syntax Reference'。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

postgresql-syntax-reference 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

postgresql-syntax-reference 需要什么权限?

权限级别是执行命令。安装流程涉及命令执行,可能通过 npx skills add https://github.com/pgschema/pgschema --skill 'PostgreSQL Syntax Reference' 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

postgresql-syntax-reference 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

postgresql-syntax-reference 用的人多吗?

公开数据是累计安装 15,741 次,近一周安装 691 次,下载 4,686 次,GitHub 851 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

postgresql-syntax-reference 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要执行命令,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 不能接受 Skill 在你机器上执行命令的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
postgresql-syntax-reference

PostgreSQL syntax reference 搜索 · 本页

15,741851执行命令未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

PostgreSQL Syntax Reference

Use this skill when you need to understand PostgreSQL's SQL syntax, DDL statement structure, or how PostgreSQL parses specific SQL constructs. This is essential for correctly parsing SQL files and generating valid DDL in pgschema.

When to Use This Skill

Invoke this skill when:

  • Understanding complex SQL syntax (CREATE TABLE, CREATE TRIGGER, etc.)
  • Generating DDL statements in internal/diff/*.go
  • Validating SQL statement structure
  • Understanding precedence and grammar rules
  • Learning about PostgreSQL-specific syntax extensions
  • Debugging how PostgreSQL interprets specific DDL constructs

Source Code Locations

Local copies (preferred - read these directly):

  • internal/gram.y - Main grammar file - Yacc/Bison grammar defining PostgreSQL SQL syntax
  • internal/scan.l - Lexical scanner (Flex/Lex) - tokenization rules

Upstream reference: https://github.com/postgres/postgres/blob/master/src/backend/parser/

Key files to reference:

Grammar and Lexer

  • internal/gram.y (local) - Main grammar file - Yacc/Bison grammar defining PostgreSQL SQL syntax
  • internal/scan.l (local) - Lexical scanner (Flex/Lex) - tokenization rules
  • keywords.c (upstream) - Reserved and non-reserved keywords

Parser Implementation

  • parse_clause.c - Parsing of clauses (WHERE, GROUP BY, ORDER BY, etc.)
  • parse_expr.c - Expression parsing (operators, function calls, etc.)
  • parse_type.c - Type name parsing and resolution
  • parse_relation.c - Table and relation parsing
  • parse_target.c - Target list parsing (SELECT list, etc.)
  • parse_func.c - Function call parsing
  • parse_utilcmd.c - Utility commands (DDL statements like CREATE, ALTER, DROP)

Analysis and Transformation

  • analyze.c - Post-parse analysis
  • parse_node.c - Parse node creation utilities

Step-by-Step Workflow

1. Identify the SQL Statement Type

Determine what kind of SQL you're working with:

Statement Typegram.y Sectionparse_utilcmd.c Function
CREATE TABLECreateStmttransformCreateStmt()
ALTER TABLEAlterTableStmttransformAlterTableStmt()
CREATE INDEXIndexStmttransformIndexStmt()
CREATE TRIGGERCreateTrigStmttransformCreateTrigStmt()
CREATE FUNCTIONCreateFunctionStmttransformCreateFunctionStmt()
CREATE PROCEDURECreateFunctionStmt(procedures are functions)
CREATE VIEWViewStmttransformViewStmt()
CREATE MATERIALIZED VIEWCreateMatViewStmt-
CREATE SEQUENCECreateSeqStmttransformCreateSeqStmt()
CREATE TYPECreateEnumStmt, CreateDomainStmt, CompositeTypeStmt-
CREATE POLICYCreatePolicyStmttransformCreatePolicyStmt()
COMMENT ONCommentStmt-

2. Locate the Grammar Rule in gram.y

Search the local gram.y for the statement's production rule:

Example - Finding CREATE TRIGGER syntax:

# Search the local copy
grep -n "CreateTrigStmt:" internal/gram.y

What to look for:

  • The production rule name (e.g., CreateTrigStmt:)
  • Alternative syntaxes (multiple | branches)
  • Optional elements (opt_* rules)
  • List constructs (*_list rules)
  • Terminal tokens (keywords, literals)

3. Understand the Grammar Structure

gram.y uses Yacc/Bison syntax:

CreateTrigStmt:
    CREATE opt_or_replace TRIGGER name TriggerActionTime TriggerEvents ON
    qualified_name TriggerReferencing TriggerForSpec TriggerWhen
    EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')'
    {
        CreateTrigStmt *n = makeNode(CreateTrigStmt);
        n->trigname = $4;
        n->relation = $8;
        n->funcname = $13;
        /* ... */
        $$ = (Node *)n;
    }

Key elements:

  • Terminals (uppercase): Keywords like CREATE, TRIGGER, ON
  • Non-terminals (lowercase): Other grammar rules like name, qualified_name
  • Actions ({...}): C code that builds the parse tree
  • Alternatives (|): Different ways to write the same statement
  • Optional elements: Rules prefixed with opt_

4. Trace Through Related Rules

Follow the grammar rules to understand the complete syntax:

Example - Understanding trigger events:

TriggerEvents:
    TriggerOneEvent
    | TriggerEvents OR TriggerOneEvent

TriggerOneEvent:
    INSERT
    | DELETE
    | UPDATE
    | UPDATE OF columnList
    | TRUNCATE

This shows:

  • Triggers can have multiple events combined with OR
  • UPDATE can optionally specify columns with OF columnList

5. Cross-Reference with parse_utilcmd.c

After understanding the grammar, check how PostgreSQL transforms the parsed statement:

Example - How CREATE TRIGGER is processed:

// In parse_utilcmd.c
static void
transformCreateTrigStmt(CreateTrigStmt *stmt, const char *queryString)
{
    // Validation and transformation logic
    // - Check trigger name conflicts
    // - Validate trigger function exists
    // - Process WHEN condition
    // - Handle constraint triggers
}

6. Apply to pgschema

Use this understanding in pgschema:

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

  • Follow gram.y syntax exactly
  • Use proper keyword ordering
  • Include all required elements
  • Quote identifiers correctly

Note: pgschema uses an inspector-only approach - both desired and current states come from database inspection rather than SQL parsing. Understanding gram.y helps ensure generated DDL is syntactically correct.

Key Grammar Concepts

Optional Elements

Grammar rules prefixed with opt_ are optional:

opt_or_replace:
    OR REPLACE     { $$ = true; }
    | /* EMPTY */  { $$ = false; }

This means CREATE OR REPLACE TRIGGER... and CREATE TRIGGER... are both valid.

Lists

Lists are typically defined recursively:

columnList:
    columnElem                     { $$ = list_make1($1); }
    | columnList ',' columnElem    { $$ = lappend($1, $3); }

Alternatives

Use | to show different syntax options:

TriggerActionTime:
    BEFORE     { $$ = TRIGGER_TYPE_BEFORE; }
    | AFTER    { $$ = TRIGGER_TYPE_AFTER; }
    | INSTEAD OF { $$ = TRIGGER_TYPE_INSTEAD; }

Precedence

Operator precedence is defined at the top of gram.y:

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

Common Grammar Patterns

CREATE Statement Pattern

Most CREATE statements follow this pattern:

CreateSomethingStmt:
    CREATE opt_or_replace SOMETHING name definition_elements

ALTER Statement Pattern

AlterSomethingStmt:
    ALTER SOMETHING name alter_action
    | ALTER SOMETHING IF_P EXISTS name alter_action

DROP Statement Pattern

DropSomethingStmt:
    DROP SOMETHING name opt_drop_behavior
    | DROP SOMETHING IF_P EXISTS name opt_drop_behavior

Important SQL Constructs for pgschema

Table Columns with Constraints

columnDef:
    ColId Typename opt_column_storage ColQualList
    | ColId Typename opt_column_storage GeneratedConstraintElem
    | ColId Typename opt_column_storage GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList

This covers:

  • Regular columns: column_name type
  • Generated columns: column_name type GENERATED ALWAYS AS (expr) STORED
  • Identity columns: column_name type GENERATED ALWAYS AS IDENTITY

Trigger WHEN Clause

TriggerWhen:
    WHEN '(' a_expr ')'    { $$ = $3; }
    | /* EMPTY */          { $$ = NULL; }

Index Elements

index_elem:
    ColId opt_collate opt_class opt_asc_desc opt_nulls_order
    | func_expr_windowless opt_collate opt_class opt_asc_desc opt_nulls_order
    | '(' a_expr ')' opt_collate opt_class opt_asc_desc opt_nulls_order

This shows indexes can be on:

  • Simple columns
  • Function expressions (functional indexes)
  • Arbitrary expressions (expression indexes)

Foreign Key Options

ConstraintAttributeSpec:
    ON DELETE key_action
    | ON UPDATE key_action
    | DEFERRABLE
    | NOT DEFERRABLE
    | INITIALLY DEFERRED
    | INITIALLY IMMEDIATE

Keywords and Reserved Words

Check keywords.c for keyword classification:

Reserved keywords: Cannot be used as identifiers without quoting

  • SELECT, FROM, WHERE, CREATE, TABLE, etc.

Type function name keywords: Can be used as function or type names

  • CHAR, CHARACTER, VARCHAR, etc.

Unreserved keywords: Can be used as identifiers

  • ABORT, ABSOLUTE, ACCESS, ACTION, etc.

Impact on pgschema: When generating DDL, quote identifiers that match reserved keywords.

Examples

Example 1: Understanding CREATE TABLE LIKE

In gram.y:

TableLikeClause:
    LIKE qualified_name TableLikeOptionList

TableLikeOptionList:

TableLikeOptionList:
    TableLikeOptionList INCLUDING TableLikeOption
    | TableLikeOptionList EXCLUDING TableLikeOption
    | /* EMPTY */

TableLikeOption:

TableLikeOption:
    COMMENTS | CONSTRAINTS | DEFAULTS | IDENTITY_P | GENERATED | INDEXES | STATISTICS | STORAGE | ALL

This tells us:

  • LIKE table_name is the basic syntax
  • Can include/exclude specific features: INCLUDING ALL, EXCLUDING INDEXES, etc.
  • Multiple options can be combined

pgschema usage: When generating DDL for tables with LIKE clauses, follow the gram.y syntax exactly to ensure valid output.

Example 2: Understanding Constraint Triggers

In gram.y:

ConstraintAttributeSpec:
    DEFERRABLE           { $$ = CAS_DEFERRABLE; }
    | NOT DEFERRABLE     { $$ = CAS_NOT_DEFERRABLE; }
    | INITIALLY DEFERRED { $$ = CAS_INITIALLY_DEFERRED; }
    | INITIALLY IMMEDIATE { $$ = CAS_INITIALLY_IMMEDIATE; }

For constraint triggers:

CreateTrigStmt:
    CREATE opt_or_replace CONSTRAINT TRIGGER name ...

This tells us:

  • Constraint triggers use CREATE CONSTRAINT TRIGGER
  • Can be DEFERRABLE or NOT DEFERRABLE
  • Can be INITIALLY DEFERRED or INITIALLY IMMEDIATE

pgschema DDL generation (internal/diff/trigger.go):

func generateCreateTrigger(trigger *ir.Trigger) string {
    var sql strings.Builder
    sql.WriteString("CREATE ")
    if trigger.IsConstraint {
        sql.WriteString("CONSTRAINT ")
    }
    sql.WriteString("TRIGGER ")
    sql.WriteString(quoteIdentifier(trigger.Name))
    // ...
    if trigger.Deferrable {
        sql.WriteString(" DEFERRABLE")
    }
    if trigger.InitiallyDeferred {
        sql.WriteString(" INITIALLY DEFERRED")
    }
    return sql.String()
}

Example 3: Understanding Expression Indexes

In gram.y:

index_elem:
    ColId opt_collate opt_class opt_asc_desc opt_nulls_order
    {
        $$ = makeIndexElem($1, NULL, NULL, $2, $3, $4, $5, NULL);
    }
    | func_expr_windowless opt_collate opt_class opt_asc_desc opt_nulls_order
    {
        $$ = makeIndexElem(NULL, $1, NULL, $2, $3, $4, $5, NULL);
    }
    | '(' a_expr ')' opt_collate opt_class opt_asc_desc opt_nulls_order
    {
        $$ = makeIndexElem(NULL, NULL, $2, $4, $5, $6, $7, NULL);
    }

This tells us:

  • Index elements can be:

1. Column names: CREATE INDEX idx ON table (column) 2. Function calls: CREATE INDEX idx ON table (lower(column)) 3. Arbitrary expressions: CREATE INDEX idx ON table ((column + 1))

  • Note the extra parentheses for arbitrary expressions: ((...))

pgschema parsing consideration:

// When parsing index definitions, handle all three forms:
// 1. Simple column reference
// 2. Function expression
// 3. Arbitrary expression (needs extra parens in DDL)

Example 4: Understanding GENERATED Columns

In gram.y:

GeneratedConstraintElem:
    GENERATED generated_when AS '(' a_expr ')' STORED
    {
        Constraint *n = makeNode(Constraint);
        n->contype = CONSTR_GENERATED;
        n->generated_when = $2;
        n->raw_expr = $5;
        n->cooked_expr = NULL;
        n->location = @1;
        $$ = (Node *)n;
    }

generated_when:
    ALWAYS    { $$ = ATTRIBUTE_IDENTITY_ALWAYS; }
    | BY DEFAULT { $$ = ATTRIBUTE_IDENTITY_BY_DEFAULT; }

This tells us:

  • Generated columns: GENERATED ALWAYS AS (expression) STORED
  • Identity columns: GENERATED ALWAYS AS IDENTITY or GENERATED BY DEFAULT AS IDENTITY
  • The expression must be in parentheses
  • Must include STORED keyword for computed columns

Debugging Tips

1. Test Grammar Interactively

Clone postgres and build the parser:

git clone https://github.com/postgres/postgres.git
cd postgres
./configure
make -C src/backend/parser

2. Compare with PostgreSQL Behavior

Test actual PostgreSQL behavior:

psql -c "CREATE TRIGGER ..."
# If PostgreSQL accepts it, the syntax is valid
# Use \d+ to see how PostgreSQL formats it

3. Check gram.y Comments

gram.y contains helpful comments explaining syntax choices and historical notes.

4. Search for Examples in Tests

PostgreSQL's test suite has extensive SQL examples:

# In postgres repo
find src/test/regress/sql -name "*.sql" -exec grep -l "CREATE TRIGGER" {} \;

Version Differences

PostgreSQL syntax evolves across versions:

  • PostgreSQL 14: Added COMPRESSION clause for tables
  • PostgreSQL 15: Added MERGE statement, UNIQUE NULLS NOT DISTINCT
  • PostgreSQL 16: Added SQL/JSON functions
  • PostgreSQL 17: Added MERGE enhancements, incremental view maintenance

For pgschema (supports 14-18):

  • Check gram.y history to see when features were added
  • Add version detection in parser if needed
  • Test across all supported versions

Verification Checklist

After consulting gram.y and implementing in pgschema:

  • Grammar rule fully understood from gram.y
  • All syntax alternatives identified
  • Optional elements properly handled
  • Keywords and quoting rules followed
  • DDL generation produces valid PostgreSQL syntax
  • Test case added in testdata/diff/
  • Tested against PostgreSQL via integration test
  • Works across PostgreSQL versions 14-18

Quick Reference

Finding syntax in gram.y (use local copy):

# Search for statement type
grep -n "CreateTrigStmt:" internal/gram.y

# Find keyword definitions
grep -n "^TRIGGER" internal/gram.y

# Understand an option
grep -A 10 "TriggerWhen:" internal/gram.y

Finding lexer rules in scan.l (use local copy):

# Search for token patterns
grep -n "identifier" internal/scan.l

# Find keyword handling
grep -n "ScanKeywordLookup" internal/scan.l

Understanding precedence:

# Look at top of gram.y
head -100 internal/gram.y | grep -A 50 "%left\|%right\|%nonassoc"

Find utility command handling (upstream):

grep -n "transformCreateTrigStmt" src/backend/parser/parse_utilcmd.c

平台分布

Codex

36.36%
按下载量换算1,704

Claude

31.12%
按下载量换算1,458

Cursor

20.18%
按下载量换算946

Gemini CLI

9.07%
按下载量换算425

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 npx skills add https://github.com/pgschema/pgschema --skill 'PostgreSQL Syntax Reference' 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills