Changelog

All notable changes to this project will be documented in this file. It uses the Keep a Changelog format, and this project adheres to Semantic Versioning.

v0.1.2 β€” 2026-01-07

This release makes binary-only changes. Once installed, any existing use of pg_clickhouse v0.1 will get its benefits on reload without needing to ALTER EXTENSION UPDATE.

⚑ Improvements

  • Added support for parameterized execution, including PREPARE and EXECUTE, by converting PostgreSQL $1-style parameters to ClickHouse {param:type}-style parameters.
  • Added support for inserting arrays to the http engine.

πŸ“š Documentation

  • Documented IMPORT FOREIGN SCHEMA identifier case preservation behavior.
  • Fixed the Postgres Docker start and connect info in the tutorial.
  • Added complete DML documentation to the reference docs, including the new PREPARE/EXECUTE support and INSERT, SET, COPY, as well as shared library preloading.

πŸͺ² Bug Fixes

  • Fixed the http engine’s parsing of UUID arrays selected from ClickHouse.
  • Fixed the binary engine’s conversion of Date values, which in arrays ended up too large by several orders of magnitude (e.g., 2025-12-05 would be converted to 10529827-09-17 😱). Thanks to Tom Lane for the pointer to the proper function to easily convert epoch seconds to a date.
  • Fixed a binary engine bug where dates and timestamps for epoch 0 (1970-01-01 00:00:00) rendered as NULL.
  • Added support for the Date32 ClickHouse type.
  • Fixed conversion of array_agg() to support ClickHouse versions prior to 23.8.
  • Fixed the precision of fractional seconds in the binary engine’s conversion of ClickHouse DateTime64 values to Postgres TIMESTAMP (#114).

πŸ“” Notes

  • Removed unused code designed to support custom PostgreSQL extensions: ajbool, ajtime, country, and istore.
  • Tweaked cost estimation to encourage pushdown of min() and max().

πŸ“š Documentation

  • Added a note to the IMPORT FOREIGN SCHEMA documentation explaining how table and column names imported from ClickHouse will have their letter casing and blank spaces preserved if they have uppercase characters or blank spaces.
  • Fixed the commands to start and connect to the pg_clickhouse Docker image in the tutorial.
  • Documented the Postgres aggregate functions known (via new tests) to push down to ClickHouse.

v0.1.1 β€” 2025-12-17

This release makes binary-only changes. Once installed, any existing use of pg_clickhouse v0.1 will get its benefits on reload without needing to ALTER EXTENSION UPDATE.

⚑ Improvements

  • Refactored the internal handling of the pg_clickhouse.session_settings GUC to parse the settings only once rather than for every query sent to ClickHouse

πŸͺ² Bug Fixes

  • Fixed a crash when sending an empty COPY FROM via the binary driver

⬆️ Dependency Updates

  • Updated vendored clickhouse-cpp library

πŸ—οΈ Build Setup

  • Fixed the Makefile targets so that calling make install without first calling make will properly create the versioned SQL file.

πŸ“š Documentation

v0.1.0 β€” 2025-12-09

⚑ Improvements

  • Improved function and aggregate pushdown
  • Added TLS support to both the http and binary engines
  • Added pushdown aggregate functions:
    • uniq()
    • uniqExact()
    • uniqCombined()
    • uniqCombined64()
    • uniqExact()
    • uniqHLL12()
    • uniqTheta()
  • Added pushdown functions:
    • toUInt8()
    • toUInt16()
    • toUInt32()
    • toUInt64()
    • toUInt128()
    • quantile()
    • quantileExact()
  • Mapped PostgreSQL regexp_like() to push down to ClickHouse match() function
  • Mapped PostgreSQL extract() to push down to equivalent ClickHouse DateTime extraction functions (already mapped to date_part())
  • Mapped PostgreSQL percentile_cont() ordered set aggregate function to push down to ClickHouse quantile() parametrized
  • Mapped the COUNT() return value to bigint
  • Added the query text and, for the http engine, the status code to error messages
  • Added pg_clickhouse.session_settings GUC, defaulting to join_use_nulls 1, group_by_use_nulls 1, final 1
  • Added mappings and support for additional data types:
    • Bool => boolean
    • Decimal => numeric
    • JSON => jsonb (http engine only)
  • Added the dbname option to http engine connections, including clickhouse_raw_query()
  • Added LEFT SEMI JOIN pushdown for EXISTS() subqueries

πŸ—οΈ Build Setup

  • Ported from clickhouse_fdw
  • Made lots of general code cleanup
  • Added PGXS build pipeline
  • Added PGXN and GitHub release workflows
  • Added pg_clickhouse OCI image workflow that publishes to ghcr.io/clickhouse/pg_clickhouse, with tags for PostgreSQL versions 13-18

πŸ“š Documentation

πŸͺ² Bug Fixes

  • Fixed dictGet(), argMin(), and argMax()
  • Fixed bug in filtered COUNT()
  • Fixed AggregateFunction option to propagate to a nested aggregate function call
  • Improved unsigned integer support

⬆️ Dependency Updates

  • Updated vendored clickhouse-cpp library
  • Reimplemented binary engine inserts with clickhouse-cpp improvements
  • Support and tested against PostgreSQL 13-18
  • Support and tested against ClickHouse 23-25

πŸ“” Notes

  • Set full version in PG_MODULE_MAGIC_EXT
  • Set to default ports to TLS for ClickHouse Cloud host names