This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
backendcritical PriorityID: postgres17-streaming-io-prefetch-pinning-boundary

Postgres 17 Streaming I/O Direct-Access Prefetch Pinning Boundary Standard

Enforces strict query isolation, memory capping, and buffer pool eviction controls for Postgres 17 asynchronous streaming read pipelines. Prevents starvation of shared buffers during mixed OLTP/HTAP workloads by bounding direct-access prefetch worker depth and requiring segregated buffer rings with synchronized connection-level GUC parameters.

Prohibited Anti-Pattern: Unbounded AIO Streaming Prefetching Exhausting Shared Buffer Pool Pins During Concurrent OLTP Load

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Postgres 17 Streaming I/O Direct-Access Prefetch Pinning Boundary Standard - Enforces strict query isolation, memory capping, and buffer pool eviction controls for Postgres 17 asynchronous streaming read pipelines. Prevents starvation of shared buffers during mixed OLTP/HTAP workloads by bounding direct-access prefetch worker depth and requiring segregated buffer rings with synchronized connection-level GUC parameters.
globs: src/database/**/*.ts, src/repositories/**/*.ts, src/infra/db/**/*.ts, src/services/analytics/**/*.ts
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/postgres17-streaming-io-prefetch-pinning-boundary"
---

# Postgres 17 Streaming I/O Direct-Access Prefetch Pinning Boundary Standard

> **Severity**: CRITICAL | **Category**: backend
> **Anti-Pattern Warning**: Unbounded AIO Streaming Prefetching Exhausting Shared Buffer Pool Pins During Concurrent OLTP Load

## System Constraints
You are a Principal Database Architect enforcing Postgres 17 Streaming I/O Direct-Access Prefetch Pinning Boundaries. PostgreSQL 17 introduces modernized streaming I/O infrastructure with asynchronous direct prefetching for sequential scans, bitmap heap scans, and index scans. You must mandate that analytical queries executed in mixed workloads utilize isolated connection sessions or transaction-level boundaries configured with bounded prefetch distances (`io_combine_limit`), strict buffer-ring retention policies (`synchronize_seqscans = on`), and reduced worker limits (`max_parallel_workers_per_gather`). Under no circumstances may code dispatch bulk streaming queries on default shared OLTP connection pools without explicitly configuring local memory allocations and unpinning barriers to protect latency-sensitive OLTP reads.

## Strict Guidelines
- Engineers MUST ALWAYS isolate heavy streaming sequential operations onto dedicated read-replica pools or set session-scoped boundary parameters (`SET LOCAL io_combine_limit = ...`, `SET LOCAL temp_buffers = ...`).
- Engineers MUST NOT run unbounded asynchronous streaming analytical scans through the shared primary OLTP connection pool without configuring an explicit BufferAccessStrategy ring or transactional limits.
- Code SHOULD restrict `max_parallel_workers_per_gather` and throttle `maintenance_io_concurrency` or direct stream limits on analytical queries running concurrently with high-throughput transactions.
- Services MUST monitor and bound buffer pin starvation by setting an explicit query cancellation threshold (`statement_timeout`) alongside streaming query transactions.
- Components NEVER execute raw bulk analytical queries using direct access streaming I/O without explicitly verifying that sequential scan synchronization (`SET LOCAL synchronize_seqscans = on`) is preserved to avoid redundant physical reads across concurrent workers.

## Bad vs Good Implementations
### Configuring Postgres 17 Streaming I/O Isolation Boundary in Node/TypeScript Repository

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Executing bulk analytical aggregate scans against the default shared OLTP connection pool allows Postgres 17's asynchronous streaming prefetch engine to pin dozens of concurrent shared buffer pages per worker. This triggers severe buffer table starvation, high lwlock contention (BufferContent/BufferMapping locks), and spikes P99 latency on concurrent transactional queries.
```typescript
import { Pool } from 'pg';

export class UnboundedAnalyticsRepository {
  constructor(private readonly sharedOltpPool: Pool) {}

  async runBulkAnalyticsScan(tenantId: string): Promise<Record<string, unknown>[]> {
    // VIOLATION: Executes high-volume asynchronous prefetch analytical scan on the primary OLTP pool
    // Default Postgres 17 streaming I/O pins aggressively in the shared buffer pool, displacing active transaction pages.
    const result = await this.sharedOltpPool.query(`
      SELECT 
        date_trunc('day', created_at) AS day,
        metric_type,
        SUM(metric_value) AS aggregate_val
      FROM tenant_event_ledger
      WHERE tenant_id = $1
      GROUP BY 1, 2
      ORDER BY 1 DESC;
    `, [tenantId]);
    
    return result.rows;
  }
}
```

#### Production Standard (Correct)
> **Standard**: The compliant code establishes an explicit transactional boundary on a dedicated analytics replica pool. It bounds Postgres 17 streaming I/O prefetching depth via `io_combine_limit`, caps parallel gather workers, guarantees `synchronize_seqscans = ON` to reuse scanned ring buffers, and sets strict timeouts to guarantee buffer unpinning and eliminate OLTP starvation.
```typescript
import { Pool, PoolClient } from 'pg';

interface StreamingIoConfig {
  maxParallelWorkers: number;
  ioCombineLimit: string; // Postgres 17 direct-access streaming IO prefetch boundary
  statementTimeoutMs: number;
}

export class IsolatedAnalyticsRepository {
  private readonly streamConfig: StreamingIoConfig = {
    maxParallelWorkers: 2,
    ioCombineLimit: '256kB',
    statementTimeoutMs: 15_000
  };

  constructor(private readonly analyticsReplicaPool: Pool) {}

  async runBulkAnalyticsScan(tenantId: string): Promise<Record<string, unknown>[]> {
    const client: PoolClient = await this.analyticsReplicaPool.connect();
    try {
      await client.query('BEGIN READ ONLY');

      // Invariant: Restrict Postgres 17 streaming I/O prefetch boundary and ring buffer concurrency
      await client.query(`
        SET LOCAL statement_timeout = ${this.streamConfig.statementTimeoutMs};
        SET LOCAL max_parallel_workers_per_gather = ${this.streamConfig.maxParallelWorkers};
        SET LOCAL io_combine_limit = '${this.streamConfig.ioCombineLimit}';
        SET LOCAL synchronize_seqscans = ON;
      `);

      const result = await client.query(`
        SELECT /*+ BufferStrategyRing */
          date_trunc('day', created_at) AS day,
          metric_type,
          SUM(metric_value) AS aggregate_val
        FROM tenant_event_ledger
        WHERE tenant_id = $1
        GROUP BY 1, 2
        ORDER BY 1 DESC;
      `, [tenantId]);

      await client.query('COMMIT');
      return result.rows;
    } catch (error) {
      await client.query('ROLLBACK');
      throw error;
    } finally {
      client.release();
    }
  }
}
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Postgres 17 Streaming I/O Direct-Access Prefetch Pinning Boundary Standard

Postgres 17 Streaming I/O Direct-Access Prefetch Pinning Boundary Standard defines an industrial-grade behavioral standard for backend engineering. Enforces strict query isolation, memory capping, and buffer pool eviction controls for Postgres 17 asynchronous streaming read pipelines. Prevents starvation of shared buffers during mixed OLTP/HTAP workloads by bounding direct-access prefetch worker depth and requiring segregated buffer rings with synchronized connection-level GUC parameters. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Unbounded AIO Streaming Prefetching Exhausting Shared Buffer Pool Pins During Concurrent OLTP Load Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftUnbounded AIO Streaming Prefetching Exhausting Shared Buffer Pool Pins During Concurrent OLTP LoadCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS isolate heavy streaming sequential operations onto dedicated read-replica pools or set session-scoped boundary parameters (`SET LOCAL io_combine_limit = ...`, `SET LOCAL temp_buffers = ...`).

Engineers MUST ALWAYS isolate heavy streaming sequential operations onto dedicated read-replica pools or set session-scoped boundary parameters (`SET LOCAL io_combine_limit = ...`, `SET LOCAL temp_buffers = ...`).

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT run unbounded asynchronous streaming analytical scans through the shared primary OLTP connection pool without configuring an explicit BufferAccessStrategy ring or transactional limits.

Engineers MUST NOT run unbounded asynchronous streaming analytical scans through the shared primary OLTP connection pool without configuring an explicit BufferAccessStrategy ring or transactional limits.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Code SHOULD restrict `max_parallel_workers_per_gather` and throttle `maintenance_io_concurrency` or direct stream limits on analytical queries running concurrently with high-throughput transactions.

Code SHOULD restrict `max_parallel_workers_per_gather` and throttle `maintenance_io_concurrency` or direct stream limits on analytical queries running concurrently with high-throughput transactions.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Services MUST monitor and bound buffer pin starvation by setting an explicit query cancellation threshold (`statement_timeout`) alongside streaming query transactions.

Services MUST monitor and bound buffer pin starvation by setting an explicit query cancellation threshold (`statement_timeout`) alongside streaming query transactions.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Components NEVER execute raw bulk analytical queries using direct access streaming I/O without explicitly verifying that sequential scan synchronization (`SET LOCAL synchronize_seqscans = on`) is preserved to avoid redundant physical reads across concurrent workers.

Components NEVER execute raw bulk analytical queries using direct access streaming I/O without explicitly verifying that sequential scan synchronization (`SET LOCAL synchronize_seqscans = on`) is preserved to avoid redundant physical reads across concurrent workers.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is Postgres 17 Streaming I/O Direct-Access Prefetch Pinning Boundary Standard critical for AI coding assistants?

Enforces strict query isolation, memory capping, and buffer pool eviction controls for Postgres 17 asynchronous streaming read pipelines. Prevents starvation of shared buffers during mixed OLTP/HTAP workloads by bounding direct-access prefetch worker depth and requiring segregated buffer rings with synchronized connection-level GUC parameters. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Unbounded AIO Streaming Prefetching Exhausting Shared Buffer Pool Pins During Concurrent OLTP Load) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

Postgres