Changelog

All notable changes to pg_pure are recorded here. The format follows Keep a Changelog; versions are semantic.

[0.1.1] - 2026-10-28

Fixed

  • META.json carried an invalid PGXN tag (pl/pure; / is not allowed by the PGXN Meta Spec), which PGXN rejected, so 0.1.0 never published to PGXN. The tag is now plpure. The extension code is identical to the 0.1.0 tree; this is a metadata-only fix so the distribution can be released.
  • The release workflow treated a PGXN 409 as “already published” and skipped, which masked the rejected 0.1.0 upload as a success. It now distinguishes an already-published 409 from a real rejection by the response body, and verifies the release is indexed on api.pgxn.org before reporting success.

[0.1.0] - 2026-10-28 (not published to PGXN)

Added

  • Initial extension. One shared library (pg_pure.so) backs two SQL languages: pg_pure (trusted) and pg_pureu (untrusted, superuser-only), following the PL/Perl plperl/plperlu model.
  • Scalar functions in Pure over int2, int4, int8, float4, float8, numeric, bool, text and varchar, with exact numeric (bigint and rational) in and out and range-checked conversions.
  • SQL NULL as the Pure symbol sql::null.
  • Database access from Pure: sql::query, sql::exec, sql::notice, sql::warning. A SQL error raised in a query reaches Pure as sql::error "SQLSTATE" "message" (each query runs in an internal subtransaction), so Pure code can catch it by SQLSTATE and continue the transaction, or let it propagate to re-raise the original error.
  • DO blocks (DO LANGUAGE pg_pureu).
  • The validator compiles a function at CREATE time.
  • Leading using MODULE; lines in a body load Pure modules.
  • Cooperative cancel (statement_timeout, pg_terminate_backend) and stack overflow (stack_fault) via libpure’s host hooks: neither crashes the backend.
  • Optional preload (shared_preload_libraries = 'pg_pure') builds and warms the interpreter in the postmaster so backends inherit it by fork; the pg_pure.using GUC lists the modules to load (default math).
  • pg_pure (trusted) is installable but its handler refuses to run until libpure gains a sandbox (DESIGN.md section 9).
  • Regression suite passes on PostgreSQL 17, 18 and 19 with zero backend crashes.