Repository navigation
docs: bring the user documentation up to date with the changes since 1.0-alpha4 - #2050
Conversation
jdatcmd
left a comment
There was a problem hiding this comment.
@OffgridwithJD Reviewed at 60490be. The audit is careful, and every claim I checked against the code holds. One rename breaks a test that runs a doc recipe, so I'm requesting a change.
Blocker: renaming events to events_live breaks the CDC recipe test
CI fails on four jobs: both pytest cluster legs, and suites (PG 17) and suites (PG 18). All four fail in the same check, logical_decoding_cdc_recipe. test_logical_decoding_cdc_recipe.py (and its shell twin) runs the recipe from docs/user-guide.md and then queries events and events_cdc by name (lines 107–125). The recipe now creates events_live, so the premise check finds no events table:
E AssertionError: premise: events is a COLUMNAR table: got '' want 'pgcolumnar'
E AssertionError: a row trigger on a COLUMNAR table fires once per inserted row: got 0 want 3
I reproduced this locally on PG18 at this head.
To fix it, do one of these:
- keep
eventsin the CDC recipe, and rename only theparallel_copyexample (events_load), which nothing executes; or - rename the tables the tests query, in both
test_logical_decoding_cdc_recipe.pyandlogical_decoding_cdc_recipe.sh.
The first is smaller and keeps the shell twin untouched.
What I checked, and it holds
cluster,recluster,cluster_hilbertandrecluster_hilberttakeVARIADIC columns name[]with no default (pgcolumnar--1.0-alpha5.sql:1145–1205).reset_optionshas no ttl arguments.parallel_export_parquetrefuses a remote target other thans3://(columnar_parallel_export.c:235–253).COLUMNAR_NATIVE_FORMAT_VERSION 2, and CI buildsPG_BETA: 19beta4.- At the cap,
groupagg_max_groupshands off to a core Finalize (columnar_vector.c:3102). - The 64 MiB REST reply text matches
exceeded %lld bytesinos_slurp_body. - Local runs:
docs_style.sh: PASSED.test_docs_links_resolve.py,test_harness_deps.py,test_docs_cover_the_corpus.pyandtest_bench_guards.py: 155 passed, 285 checks.
Non-blocking, and partly mine
#2047 merged after you wrote this. A REST list's pages now share the same 64 MiB cap together, refused with the REST catalog <list> is larger than 64 MB across its pages (54000). If you add a sentence beside the reply cap, that covers it. Otherwise I'll do it in a follow-up. My message says "MB" where your docs correctly say MiB; I'll change the message to "MiB" in that follow-up either way.
🤖 Generated with Claude Code
…1.0-alpha4 An audit of every [Unreleased] CHANGELOG entry (314) against docs/*.md, README.md and the code, plus a review of the pages for the plain-language rules no checker measures. Each fix was confirmed in src/, objstore/ or the 1.0-alpha5 install script before it was written. Stale: release/PGXN/native-format versions in limitations.md; groupagg_max_groups no longer errors at the cap (configuration.md, limitations.md); the downgrade paragraph after #1137; post-codec choice for every encoding (administration.md); 19beta2 -> 19beta4 in six places; the PG 13/14 fallback in sql-reference.md; cluster/recluster examples without their required columns; export URL schemes; reset_options' accepted arguments; benchmarks' "off by default" and delete headings; the user guide recreating `events`; the Remove steps' order. Missing: pgcolumnar_objstore.so and its same-build rule; rollup restore and rebase_rollup; TID range scans; parallel projection scans; import_parquet into a partitioned table; export_parquet timestamp types; collation change dropping zone maps; timestamp vs timestamptz skipping; vacuum_full skipping matviews; the REST reply cap; the one-part upload edge; export cleanup logging; the DEBUG1 probe line; the glob name limit in limitations.md; superuser-only functions; the two internal test settings; restart- and reload-only settings; truncate needing enable_end_truncation. Test first: test_docs_links_resolve.py resolves every internal link against the target page's headings with the site's anchor rule. It failed on four links whose anchors broke when parallel_copy and compact_rewrite headings changed, and passes after. Seven mutants of the reader are killed. guard_tests 878 -> 881, TESTS.md §359. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test_bench_guards.py and bench_guards.sh find the tuned-arm section by its heading; the body already dates the defaults to the 2026-08-05 run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test_logical_decoding_cdc_recipe runs the user-guide recipe and queries events by name, so the rename to events_live broke it. Only the parallel_copy example keeps its new name. #2047 caps a REST list's pages together; say so beside the single-reply cap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
60490be to
3e9476f
Compare
|
@jdatcmd Fixed at 3e9476f, and rebased onto main (c64d82f).
Local runs: 🤖 Generated with Claude Code |
jdatcmd
left a comment
There was a problem hiding this comment.
@OffgridwithJD Re-reviewed at 3e9476f. Both points are fixed, so I'm approving.
What changed, and it holds
- The CDC recipe creates
eventsagain. Noevents_liveremains anywhere in the tree (git grep events_livefinds nothing). Theparallel_copyexample keeps its new name, and no test runs that example. - The cross-page REST cap is documented. The new sentence in
docs/sql-reference.mdmatches #2047: a list's pages share one 64 MiB cap, and going over it is refused with54000. The sentence doesn't quote the message text, so my #2051 (which changes "MB" to "MiB" in the message) doesn't conflict with it.
Local runs at this head
docs_style.sh: PASSED.test_logical_decoding_cdc_recipe.py,test_docs_links_resolve.py,test_docs_cover_the_corpus.pyandtest_bench_guards.py:- PG18: 171 passed, 237 pass, 0 fail.
- PG17: 171 passed, 237 pass, 0 fail.
When I posted this, CI had 14 of 15 checks passed, with pytest (cluster tests, PG 18) still running. Merge once all 15 pass.
🤖 Generated with Claude Code
The user guide gains "How a table is stored": row group, chunk group and vector, and "stripe" as the older name for a row group that survives in stripe_row_limit, stripe_count and stripeid. The two prose uses of "stripe" (configuration.md's parallel_flush row, benchmarks.md) now say row group. benchmarks.md counted 10,000,000 rows at the 150000 default as 67 chunk groups; they are 67 row groups. configuration.md's "whole segments" was a fifth word for the same unit. Test first: test_docs_storage_terms.py fails on any user page that says stripe outside code (fences, code spans, link targets), and on a user guide whose storage section does not define the units. It failed on the two prose uses and passes after. Eight mutants killed. NO_CLUSTER; guard_tests 892 -> 895; TESTS.md §361 (stacked on #2050's §360). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What this is
An audit of the user documentation after 1.0-alpha4, with fixes for what it found:
## [Unreleased]inCHANGELOG.mdwas checked againstdocs/*.md,README.mdand the code.docs_style.shcannot measure.Every fix was confirmed against
src/,objstore/orpgcolumnar--1.0-alpha5.sqlbefore it was written. Where the code disagreed with the changelog, the doc follows the code.docs_style.shpassed on main before this change (54/54) and still passes.Test first: internal links
test/pytest/test_docs_links_resolve.pyresolves every relative link indocs/*.mdandREADME.md:pymdownx.slugs.slugify, lower case).On main it failed on four links. The
parallel_copyheading gaineddedupand thecompact_rewriteheading gained its defaults, so those anchors moved. Three pages linked to the old ones. It passes after this change.The test kills seven mutants of its reader: punctuation kept, underscores dropped, a link in a heading read as markdown, fenced headings counted, no anchor check, no file check, external links checked.
Registries: NO_CLUSTER,
guard_tests 889 -> 892, TESTS.md §360 (rebased onto #2043).Corrected (the docs said something no longer true)
limitations.md
v1.0-alpha3" and PGXN1.0.0-alpha.3. Now: version 1.0-alpha5, latest publishedv1.0-alpha4, PGXN1.0.0-alpha.5.groupagg_max_groups(configuration.md, limitations.md)Finalizeor spills to a sort.administration.md
Version and examples
cluster,recluster,cluster_hilbertandrecluster_hilbertexamples had no columns, so they could not run. All four takeVARIADIC columns name[]with no default.Exports
export_arrowandexport_parquetlisted onlys3://. They also write togs://,http://andhttps://.http(s)://.parallel_export_parquettakes only a local directory ors3://.parallel_export_parquetcleanup text said the dispatcher "cannot address" a dead worker's upload. It lists and aborts this run's open uploads.configuration.md
reset_optionsaccepted "exactly whatset_optionsaccepts". It has no ttl arguments.row_lock_bucketstoo) and every reload-only one (autovacuum*).Other pages
test_bench_guards.pyandbench_guards.shfind the section by it. The delete heading is changed to match its own body.expire, andencode_effortis per table, not per column.events; they are renamed.Newly documented
Install and upgrade (installation.md)
make installalso installspgcolumnar_objstore.so.Backup and rollups (administration.md, how-to.md)
pg_dumprestore,refresh_rolluprefuses with 55000 untilrebase_rollup. A physical copy needs no rebase.Scans and skipping
timestampcolumn against atimestamptzconstant does not skip (limitations.md).Parquet, Iceberg and object storage
import_parquetrefuses a partitioned table with 42809.export_parquetwritestimestampandtimestamptz.vacuum_fullskips columnar materialized views.nameis refused.Settings and permissions
truncateneedsenable_end_truncation, which is superuser-only and off by default.rollup_pauseandtier_fault_after.Examples and pages
Removed from user pages
test/tier_partition.shchecks each of these statements" and the sametest/rollup.shsentence (how-to.md).test/index_am_support.share now an HTML comment above the list. Both readers still parse the bullet, andtest_index_am_support.pypasses on PG18. A plain pointer to the limitations page replaces the link that was inside those notes.Not changed here
The style reviews also proposed larger rewrites. These are judgment calls about how the project writes, so they are not in this PR:
sql-reference.mdinto Partitions, Rollups and Aggregates sections, with a contents list;Checks run
bash test/docs_style.sh: 54/54 passed.test_docs_links_resolve.py,test_docs_style.py,test_docs_how_to_sections.py,test_docs_table_structure.py: 63 passed.test_index_am_support.pyon PG18: passed.test_harness_deps.pymembership checks: passed.🤖 Generated with Claude Code