Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Known Issues

Живой реестр известных проблем для repeatable triage. Каноничный источник: этот runbook в angarabook/src/operations/.

Purpose

  • Явно фиксировать известные gaps;
  • привязывать reproducible repro + expected SQLSTATE/shape;
  • упрощать release decision.

Usage rules

  • Добавлять issue сразу, когда проблема воспроизводима и временно допустима.
  • Предпочитать ссылку на regression test, который фиксирует ожидаемое поведение.
  • Закрывать issue только после фикса + обновления tests/evidence.

Entry template (minimum)

  • ID
  • Area
  • Severity
  • Affects
  • Repro
  • Expected
  • Observed
  • Status
  • Owner
  • Next step

Fixed in v0.6.5.5

GAP-C2: UPDATE SET col = func() not supported

  • Status: Fixed in RM-0.6.5.5.
  • Summary: UPDATE SET now supports function calls (e.g., NOW()) and CAST expressions, unblocking Odoo 19 record writes.

GAP-C5: date_trunc() not implemented

  • Status: Fixed in RM-0.6.5.5.
  • Summary: date_trunc(field, timestamp) is fully implemented for all standard fields, unblocking Odoo reporting.

GAP-DJ-001/002: Missing set_config() and obj_description()

  • Status: Fixed in RM-0.6.5.5.
  • Summary: Added stubs for set_config and obj_description to ensure Django ORM introspection and migrations work without monkey-patches.

Protocol: Timestamp UTC serialization & OID mapping

  • Status: Fixed in RM-0.6.5.5.
  • Summary: TIMESTAMP WITHOUT TIME ZONE is now correctly mapped to OID 1114 and serialized in UTC without offset, fixing time-shift issues in psycopg3.

Fixed in v0.6.5.3

GAP-RUST-001: Missing ParameterDescription in Extended Query Protocol

  • Status: Fixed in RM-0.6.5.3.
  • Summary: ParameterDescription (‘t’) is now sent before RowDescription/NoData for Statement Describe, unblocking sqlx and tokio-postgres EQP.

GAP-A1: Cast expressions fail in Extended Query Protocol

  • Status: Fixed in RM-0.6.5.3.
  • Summary: SELECT 1::int4 and arithmetic via EQP no longer cause “vector type mismatch Utf8”.

GAP-A2: date/timestamp encoding violation in pgwire

  • Status: Fixed in RM-0.6.5.3.
  • Summary: date and timestamp values are returned in ISO-8601 format, not as raw integers.

GAP-C1: pg_catalog.pg_index missing

  • Status: Fixed in RM-0.6.5.3.
  • Summary: pg_catalog.pg_index now returns an empty resultset instead of an error.

GAP-C3: IS NULL / IS NOT NULL predicates not supported

  • Status: Fixed in RM-0.6.5.3.
  • Summary: IS NULL and IS NOT NULL work in the general query path.

GAP-C4: = ANY(ARRAY[…]) not supported

  • Status: Fixed in RM-0.6.5.3.
  • Summary: col = ANY(ARRAY[v1, v2, v3]) now works (desugars to IN).

GAP-C6: pg_class WHERE filter bypass

  • Status: Fixed in RM-0.6.5.3.
  • Summary: pg_class WHERE relname = 'foo' filter now works correctly.

GAP-C7: CREATE SEQUENCE + nextval() catalog registration

  • Status: Fixed in RM-0.6.5.3.
  • Summary: CREATE SEQUENCE + nextval() works in the simple query path.

KI-2026-005: SQLSTATE leakage

  • Status: Fixed in RM-0.6.5.3.
  • Summary: Internal execution errors (e.g., raw 54000) are no longer leaked directly to clients and are properly mapped to standard protocol errors.

Current open issues

KI-2026-006 — SELECT ... FOR UPDATE supports only the documented single-table form

  • ID: KI-2026-006
  • Area: SQL / Row locking
  • Severity: Medium (application compatibility)
  • Affects: clients that rely on SELECT ... FOR UPDATE with joins, subqueries, NOWAIT, SKIP LOCKED, or FOR SHARE
  • Repro:
    1. Prepare two simple tables:
      SET search_path = public;
      CREATE TABLE t_lock_a (id INT);
      CREATE TABLE t_lock_b (id INT);
      INSERT INTO t_lock_a (id) VALUES (1);
      INSERT INTO t_lock_b (id) VALUES (1);
      
    2. Run a locking query outside the documented single-table form:
      SELECT t_lock_a.id
      FROM t_lock_a
      JOIN t_lock_b ON t_lock_a.id = t_lock_b.id
      FOR UPDATE;
      
    3. Or run a lock-clause variant:
      SELECT id FROM t_lock_a FOR UPDATE SKIP LOCKED;
      
  • Expected: unsupported locking forms fail closed with SQLSTATE 0A000 feature_not_supported; parser-level incompatibility may fail earlier with SQLSTATE 42601 syntax_error.
  • Observed: only the plain single-table FOR UPDATE path with id in projection is part of the documented contract.
  • Status: Open.
  • Owner: SQL / MVCC owner
  • Next step: define the full lock-clause compatibility matrix before documenting additional forms as supported.

KI-2026-004 — current_setting() returned NULL for unknown keys (fixed RM-0.6.5.1)

  • ID: KI-2026-004
  • Area: SQL / Session claims
  • Severity: Minor (operator UX)
  • Affects: clients calling current_setting('app.nonexistent') and expecting PostgreSQL-compatible error
  • Repro: SELECT current_setting('app.nonexistent') on a session without that claim set
  • Expected: ERROR: unrecognized configuration parameter "app.nonexistent" (SQLSTATE 42704)
  • Observed: result was NULL (silent empty result), diverging from PostgreSQL semantics
  • Status: Fixed (RM-0.6.5.1 Track Z item Z4). Unit test current_setting_unknown_key_returns_42704 pins the fix.
  • Owner: Core team
  • Next step: N/A — closed.

KI-2026-001 — WAL strict-mode latency on write-heavy workloads

  • ID: KI-2026-001
  • Area: WAL / Commit path
  • Severity: Major (performance)
  • Affects: deployments with ANGARABASE_TRANSACTION_LOG_DURABILITY=strict and frequent DML commits
  • Repro:
    1. Run write-heavy transactional workload (INSERT/UPDATE/DELETE) in strict durability mode.
    2. Compare commit latency against the same workload with grouped flush boundaries.
  • Expected: strict mode preserves durability with near-commit-boundary flush cost.
  • Observed: per-record fsync amplification can inflate commit latency noticeably.
  • Status: Open (tracked as TD-2026-0184, scheduled RM-0.6.4.0)
  • Owner: WAL owner / Core team
  • Next step: land commit-boundary fsync consolidation and re-run strict-mode benchmark pack.

KI-2026-002 — Grafana 12 UI importer fails on canonical dashboard JSON

  • ID: KI-2026-002
  • Area: Observability / Dashboards
  • Severity: Medium (operator UX)
  • Affects: manual dashboard import through Grafana 12 UI
  • Repro:
    1. Open Grafana 12.x and use “Import dashboard”.
    2. Load one of tools/observability/grafana/*.json.
  • Expected: dashboard imports via UI without manual rewriting.
  • Observed: Grafana 12 UI may fail with Cannot read properties of undefined (reading 'type').
  • Status: Mitigated workaround available (tools/observability/grafana/import/ bundle, tracked by TD-2026-0163)
  • Owner: Observability owner
  • Next step: keep canonical JSON as source of truth; for Grafana 12 manual import use the import/ bundle flow.

KI-2026-003 — No offline major-version migrator yet

  • ID: KI-2026-003
  • Area: Upgrade / Operations
  • Severity: Medium (operational risk)
  • Affects: major upgrades that require on-disk format change
  • Repro:
    1. Prepare data dir with one format version.
    2. Attempt direct startup with incompatible major format.
  • Expected: supported offline migrator path for major on-disk transitions.
  • Observed: fail-closed behavior works, but migration path is still dump/restore.
  • Status: Open (TD-2026-0170, linked risk R-0.6.3.11-04)
  • Owner: Core team
  • Next step: design and implement offline migrator contract in a dedicated train.