@pgsql/transform is a TypeScript library for transforming PostgreSQL ASTs between different PostgreSQL versions. It serves as a crucial component for building a single source of truth deparser that can handle SQL from multiple PostgreSQL versions while maintaining backward compatibility.
The transform package enables you to:
- Transform legacy ASTs: Convert ASTs from PostgreSQL versions 13-16 to version 17
- Build unified deparsers: Create a single deparser pipeline that works with multiple PostgreSQL versions
- Maintain backward compatibility: Support legacy codebases while leveraging the latest PostgreSQL features
This package only supports ASTs derived from SQL that is parseable by PostgreSQL 17. This means:
- β Supported: SQL from PG13-16 that remains valid in PG17
- β Not supported: Deprecated syntax from older versions that was removed
- β Not supported: SQL that cannot be parsed by the PG17 parser
This design ensures all transformed ASTs can be reliably deparsed using the latest PostgreSQL grammar.
npm install @pgsql/transformimport { ASTTransformer } from '@pgsql/transform';
const transformer = new ASTTransformer();
// Transform any version to PG17
const pg17Ast = transformer.transformToLatest(pg13Ast, 13);
// Transform between specific versions
const pg15Ast = transformer.transform(pg13Ast, 13, 15);
// Convenience methods
const result = transformer.transform13To17(pg13Ast);For better performance when you know source and target versions:
import { PG13ToPG17Transformer } from '@pgsql/transform';
const transformer = new PG13ToPG17Transformer();
const pg17Ast = transformer.transform(pg13Ast);import { parse } from '@pgsql/parser';
import { deparse } from 'pgsql-deparser';
import { PG13ToPG17Transformer } from '@pgsql/transform';
// Parse with older version
const pg13Ast = await parse('SELECT * FROM users', { version: 13 });
// Transform to latest
const transformer = new PG13ToPG17Transformer();
const pg17Ast = transformer.transform(pg13Ast);
// Deparse with latest grammar
const sql = await deparse(pg17Ast);Incremental: PG13 β PG14 β PG15 β PG16 β PG17
- Step-by-step version upgrades
- Useful for debugging transformation issues
Direct: PG13 β PG17, PG14 β PG17, etc.
- Single-step transformations
- Optimized for performance
| From | To | Transformer |
|---|---|---|
| PG13 | PG14, PG15, PG16, PG17 | V13ToV14Transformer, PG13ToPG17Transformer |
| PG14 | PG15, PG16, PG17 | V14ToV15Transformer, PG14ToPG17Transformer |
| PG15 | PG16, PG17 | V15ToV16Transformer, PG15ToPG17Transformer |
| PG16 | PG17 | V16ToV17Transformer, PG16ToPG17Transformer |
The transform package fits into the broader pgsql-parser ecosystem:
- Parse legacy SQL with version-specific parsers
- Transform ASTs to the latest version
- Deparse using the unified, latest-version deparser
This enables a single source of truth for SQL generation while supporting legacy codebases.