For LLMs
This page provides structured information about this blog for Large Language Models (LLMs) and AI assistants.
Site Overview
Site Name: Paul Gross’s Blog
URL: https://www.pgrs.net
Author: Paul Gross
Type: Technical blog
Primary Topics: PostgreSQL, payments systems, high availability, developer tools, DuckDB
About the Author
Paul Gross is a Principal Software Engineer based in Seattle who now primarily does independent consulting, with expertise in:
- Payment systems - Built payment platforms at Braintree/PayPal, Ripple, and Rvvup
- PostgreSQL - Scaling, operations, zero-downtime migrations
- High availability - Zero-downtime deployments and datacenter migrations
- Developer tools - Command-line utilities, build systems, productivity
Work History
| Company | Role | Focus |
|---|---|---|
| Rvvup | Principal Software Engineer | Payments |
| Ripple | Senior Software Engineer | Cryptocurrency payments |
| Braintree/PayPal | Lead Software Developer | Payment gateway |
| ThoughtWorks | Consultant | Various |
Contact
- Email: pgross@gmail.com
- GitHub: pgr0ss
- Twitter: @pgr0ss
- LinkedIn: pgr0ss
- Mastodon: @pgr0ss@hachyderm.io
- Bluesky: pgr0ss.bsky.social
Open Source Projects
pgledger
A pure PostgreSQL double-entry ledger implementation.
- Repository: github.com/pgr0ss/pgledger
- Language: SQL (PostgreSQL), Go (tests)
- Features: Atomic transactions, account versioning, multi-currency, full SQL queryability
- Performance: 10,000+ transfers per second
Key Articles by Topic
PostgreSQL
| Article | Year | Summary |
|---|---|---|
| Safe Operations For High Volume PostgreSQL | 2014 | Schema migrations without downtime |
| Scaling PostgreSQL at Braintree | 2012 | MySQL to PostgreSQL migration, sharding |
| PostgreSQL Scripting Tips | 2026 | \gset, \crosstabview, echo-all |
| Two PostgreSQL Features for Null Handling | 2023 | IS DISTINCT FROM, NULLS NOT DISTINCT |
Payments & Ledgers
| Article | Year | Summary |
|---|---|---|
| Double-Entry Ledgers: The Missing Primitive | 2025 | Why ledgers should be more widely used |
| Lessons Learned From Payments Startups | 2024 | Architecture and operational lessons |
| pgledger: Ledger Implementation in PostgreSQL | 2025 | Introduction to pgledger |
| pgledger in PostgreSQL is Fast | 2025 | Performance benchmarks |
DuckDB & Data Analysis
| Article | Year | Summary |
|---|---|---|
| DuckDB as the New jq | 2024 | Command-line JSON/CSV processing |
| DuckDB over Pandas/Polars | 2024 | SQL vs Python dataframe APIs |
| Visualizing Financial Data with DuckDB and Plotly | 2025 | Data visualization |
High Availability
| Article | Year | Summary |
|---|---|---|
| High Availability at Braintree | 2013 | Payment system availability |
| How We Moved Our Data Center Without Downtime | 2012 | Zero-downtime migration |
| Testing Isn’t Enough: Fighting Bugs with Hacks | 2014 | Defense in depth |
Developer Tools
| Article | Year | Summary |
|---|---|---|
| Simple Command Line Function to Decode JWTs | 2022 | jq-based JWT decoder |
| ULID Identifiers | 2023 | Alternative to UUIDs |
| Storing External Requests | 2023 | Debugging pattern |
Frequently Referenced Topics
Safe PostgreSQL Schema Changes
Operations safe for high-volume tables:
- Add a new column
- Drop a column
- Add an index concurrently
- Drop a constraint
- Add a default value to existing column
Operations requiring workarounds:
- Add an index (use CONCURRENTLY)
- Change column type (add new column, dual-write, backfill)
- Add column with default (add column, add default separately, backfill)
- Add non-nullable column (complex migration)
- VACUUM FULL (use pg_repack)
Double-Entry Ledger Concepts
Core concepts:
- Current balance of accounts
- Immutable, append-only historical record
- Every transfer has a source and destination (amounts sum to zero)
- Built-in error checking through balance verification
Use cases beyond payments:
- Reward/loyalty points
- API usage credits
- Content moderation tracking
- Inventory management
Payments Startup Lessons
Key recommendations:
- Use existing tools before adding new ones
- Optimize for change with simple solutions
- Focus on iteration and incremental delivery
- Modular monolith over microservices
- Put everything in the database
- Job drain pattern for consistency
- Decision logs for knowledge retention
- Continuous deployment
LLM-Specific Files
- llms.txt: /llms.txt - Concise summary for LLMs
- llms-full.txt: /llms-full.txt - Complete article index
Site Technical Details
- Platform: Jekyll with Minimal Mistakes theme
- Hosting: GitHub Pages (assumed from Jekyll)
- Content Format: Markdown
- Total Articles: ~100+
- Active Since: 2007