Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vt79M-003ZL6-0f for pgsql-announce@arkaria.postgresql.org; Thu, 19 Feb 2026 16:45:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vt79K-004ghu-31 for pgsql-announce@arkaria.postgresql.org; Thu, 19 Feb 2026 16:45:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vt79K-004ghh-0b for pgsql-announce@lists.postgresql.org; Thu, 19 Feb 2026 16:45:10 +0000 Received: from mahout.postgresql.org ([2001:4800:3e1:1::227]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vt79G-00000000ASJ-1y0c for pgsql-announce@lists.postgresql.org; Thu, 19 Feb 2026 16:45:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Message-ID:Date:Reply-To:From:To:Subject: MIME-Version:Content-Type:Sender:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:In-Reply-To:References; bh=wKRRZ5wWo32xYJ9d3rr0XQ8h0DMvlQlhbRkgbtjXGVw=; b=rMrSdP7illvZQ7JVt/qr2fw5Dh t1Af/d6Bwj+ZIkhOmPtA/7J2pXOsnEbIaaXiNEOfn0E6/o5tDdVB2+LB73CVYcKcGX7pF7ZzffW8n 2r95Yvl+spKknK648r09lLFwvp0dG7WJ/cDcVzkSwLJPQH3guHCjCuyNDmGh5FQ9uPZGWElvPM/LD 1tpbEKdvaJVGfTE4JwKLezu8uy9+4g7miDpjdFAYbSBgLdxcMnDstjcDUtU/kPwCU9O4TPU9XP9aY BOZ+7atQf3/zBbSSdoQuyvt+ECXMbmd3yz6Kqk0qyruM0Sd88CeQIKWKi4c2THhdToxITaFsUSLOx XZOkROBA==; Received: from wrigleys.postgresql.org ([217.196.149.60]) by mahout.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vt79F-000T2u-0r for pgsql-announce@lists.postgresql.org; Thu, 19 Feb 2026 16:45:06 +0000 Received: from localhost ([127.0.0.1] helo=wrigleys.postgresql.org) by wrigleys.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vt79D-006HEa-31 for pgsql-announce@lists.postgresql.org; Thu, 19 Feb 2026 16:45:03 +0000 Content-Type: multipart/alternative; boundary="===============8111982732651028267==" MIME-Version: 1.0 Subject: PostgreSQL Anonymizer 3.0 : Parallel Static Masking + JSON import / export To: PostgreSQL Announce From: Dalibo via PostgreSQL Announce Reply-To: damien.clochard@dalibo.com Date: Thu, 19 Feb 2026 16:44:13 +0000 Message-ID: <177151945372.1283375.8981616553748832795@wrigleys.postgresql.org> X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-pglister-tags: related X-pglister-tagsig: 9479c51115aafeb9398034b827ea008c1d2710bf232c103380ce43e8d48db7a5 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --===============8111982732651028267== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Eymoutiers, France, Februrary 11th, 2026 Dalibo publishes `PostgreSQL Anonymizer 3.0`, a new major version of our privacy by design extension. Enhanced Privacy Protection for Your Data ---------------------------------------------------------------------------= ----- `PostgreSQL Anonymizer` is an extension that hides or replaces personally identifiable information (PII) or commercially sensitive data from a Postgr= eSQL database. The extension offers 6 different masking strategies: * [Dynamic Masking] - Real-time data protection * [Static Masking] - Permanent data transformation * [Replica Masking] - Anonymized logical replication * [Backup Masking] - Privacy-protected database exports * [Masking Views] - Controlled data visibility * [Masking Data Wrappers] - Extended protection across systems Each strategy is complemented by an enhanced suite of Masking Functions, in= cluding advanced techniques such as: Substitution, Randomization, Faking, Pseudonym= ization, Partial Scrambling, Shuffling, Noise Addition and Generalization. The extension can be installed with Debian and RPM packages, an Ansible rol= e, a Docker image, etc. You can use it on most major DBaaS providers including : Alibab= a Cloud, Crunchy Bridge, Google Cloud SQL, IBM Cloud, Microsoft Azure Database, Neon= , Yandex. It is also available on some Postgres forks such as EDB Advanced Postgres, = Greenplum and Yugabyte. See the [INSTALL] section of the documentation for more details! [Masking Functions]: https://postgresql-anonymizer.readthedocs.io/en/latest= /masking_functions/ [Backup Masking]: https://postgresql-anonymizer.readthedocs.io/en/latest/an= onymous_dumps/ [Static Masking]: https://postgresql-anonymizer.readthedocs.io/en/latest/st= atic_masking/ [Dynamic Masking]: https://postgresql-anonymizer.readthedocs.io/en/latest/d= ynamic_masking/ [Replica Masking]: https://postgresql-anonymizer.readthedocs.io/en/latest/r= eplica_masking/ [Masking Views]: https://postgresql-anonymizer.readthedocs.io/en/stable/mas= king_views/ [Masking Data Wrappers]: https://postgresql-anonymizer.readthedocs.io/en/st= able/masking_data_wrappers/ [INSTALL]: https://postgresql-anonymizer.readthedocs.io/en/latest/INSTALL/ Parallel Static Masking ---------------------------------------------------------------------------= ----- For a large database, static masking can be a time-consuming operation. To = improve performance, the extension supports parallel static masking using PostgreSQL background workers. Instead of using `anon.anonymize_database()`, you can use the parallel vers= ion: ```sql SELECT anon.anonymize_database_parallel(4); ``` The parameter specifies the number of parallel workers to use. The function= will: 1. Analyze the foreign key relationships between tables 2. Group tables to avoid constraint violations 3. Distribute the work across multiple background workers 4. Process tables in parallel where possible This feature was added by Pierre-Marie Petit. JSON Import / Export ---------------------------------------------------------------------------= ----- When a masking policy contains a lot of rules, it can be difficult to maint= ain them as a long list of Security Labels. To simplify thinks and help automat= ing the management of masking rules, rules can now be imported and exported in JSON format via the functions : * `anon.export_current_database_rules(policy text DEFAULT 'anon')` * `anon.export_roles_rules(policy text DEFAULT 'anon')` * `anon.import_database_rules(database_rules jsonb, policy text DEFAULT 'an= on')` * `anon.import_roles_rules(role_rules jsonb, policy text DEFAULT 'anon'` Since roles are instance wide objects they must be managed separately. This feature was contributed by Benoit Lobr=C3=A9au. Important Security Updates ---------------------------------------------------------------------------= ----- Version 3.0 includes fixes for 2 critical vulnerabilities allowing users to gain superuser privileges under certain circumstances. The risk is very high on PostgreSQL 14 and on instances upgraded from PostgreSQL 14 and earlier. **All users should upgrade the extension to version 3.0 as soon as possible= .** If a quick upgrade is not possible, the workaround below can mitigate the r= isk: REVOKE CREATE ON SCHEMA public FROM PUBLIC; DROP FUNCTION anon.get_tablesample_ratio(OID); For more details see [issue 616] (CVE-2026-2360) and [issue 617] (CVE-2026-= 2361). [issue 616]: https://gitlab.com/dalibo/postgresql_anonymizer/-/issues/616 [issue 617]: https://gitlab.com/dalibo/postgresql_anonymizer/-/issues/617 Deprecations and Removed Features ---------------------------------------------------------------------------= ----- This major comes with a series of breaking changes, in particular: * PostgreSQL 13 is not supported anymore * Legacy Static Masking was deprecated since version 2.0 and it is now full= y removed * The `anon.pg_masking_rules` view is replaced by `anon.{all|sys|user}_rule= s` * Support for RHEL 8 is now deprecated and we plan to fully remove it in version 4.0 in 2027 For upgrade instructions, please refer to the [UPGRADE] section in the documentation. [UPGRADE]: https://postgresql-anonymizer.readthedocs.io/en/stable/UPGRADE/ Acknowledgments ---------------------------------------------------------------------------= ----- This release also includes code, bugfixes, documentation, code reviews and = ideas from Pierre-Marie Petit, Benoit Lobr=C3=A9au, Robin Portigliatti, Ludovic G= ilbon and other [contributors]. We would like to thanks the people at [Efluid] who helped us with their ide= as, comments and testing. [Efluid]: https://www.efluid.com/ And also special thanks to the [PGRX] team for their amazing work! [contributors]: https://gitlab.com/dalibo/postgresql_anonymizer/-/blob/mast= er/AUTHORS.md [PGRX]: https://github.com/pgcentralfoundation/pgrx Join our community to improve data privacy! ---------------------------------------------------------------------------= ----- PostgreSQL Anonymizer is part of the [Dalibo Labs] initiative. It is mainly developed by [Damien Clochard]. This is an open project, contributions are welcome. We need your feedback a= nd ideas! Let us know what you think of this tool, how it fits your needs and what features are missing. If you want to help, you can find a list of [Junior Jobs]. [Junior Jobs]: https://gitlab.com/dalibo/postgresql_anonymizer/issues?label= _name%5B%5D=3DJunior+Jobs [Dalibo Labs]: https://labs.dalibo.com [Damien Clochard]: https://www.dalibo.com/en/equipe#daamien --===============8111982732651028267== Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable PostgreSQL Anonymizer 3.0 : Parallel Static Masking + JSON impor= t / export
 

PostgreSQL Anonymizer 3.0 : Parallel Static Masking + JSON import / e= xport

Eymoutiers, France, Februrary 11th, 2026

Dalibo publishes PostgreSQL Anonymize= r 3.0, a new major version of our privacy by design extension.

Enhanced Privacy Protection for= Your Data

PostgreSQL Anonymizer is an ex= tension that hides or replaces personally identifiable information (PII) or commercially sensitive data from a Postgr= eSQL database.

The extension offers 6 different masking st= rategies:

Each strategy is complemented by an enhance= d suite of Masking Functions, including advanced techniques such as: Substitution, Randomization, Faking, Pseudonym= ization, Partial Scrambling, Shuffling, Noise Addition and Generalization.

The extension can be installed with Debian = and RPM packages, an Ansible role, a Docker image, etc. You can use it on most major DBaaS providers including : Alibab= a Cloud, Crunchy Bridge, Google Cloud SQL, IBM Cloud, Microsoft Azure Database, Neon= , Yandex.

It is also available on some Postgres forks= such as EDB Advanced Postgres, Greenplum and Yugabyte.

See the INSTALL section of the documentation for more detail= s!

Parallel Static Masking

For a large database, static masking can be= a time-consuming operation. To improve performance, the extension supports parallel static masking using PostgreSQL background workers.

Instead of using anon.anonymize_datab= ase(), you can use the parallel version:

sql SELECT anon.anonymize_database_parallel(4);

The parameter specifies the number of paral= lel workers to use. The function will:

  1. Analyze the for= eign key relationships between tables
  2. Group tables to= avoid constraint violations
  3. Distribute the = work across multiple background workers
  4. Process tables = in parallel where possible

This feature was added by Pierre-Marie Peti= t.

JSON Import / Export

When a masking policy contains a lot of rul= es, it can be difficult to maintain them as a long list of Security Labels. To simplify thinks and help automat= ing the management of masking rules, rules can now be imported and exported in JSON format via the functions :

  • anon.expo= rt_current_database_rules(policy text DEFAULT 'anon')
  • anon.expo= rt_roles_rules(policy text DEFAULT 'anon')
  • anon.impo= rt_database_rules(database_rules jsonb, policy text DEFAULT 'anon')<= /li>
  • anon.impo= rt_roles_rules(role_rules jsonb, policy text DEFAULT 'anon'

Since roles are instance wide objects they = must be managed separately.

This feature was contributed by Benoit Lobr= =C3=A9au.

Important Security Updates

Version 3.0 includes fixes for 2 critical v= ulnerabilities allowing users to gain superuser privileges under certain circumstances. The risk is very high on PostgreSQL 14 and on instances upgraded from PostgreSQL 14 and earlier.<= /p>

All users should upgrade the extens= ion to version 3.0 as soon as possible.

If a quick upgrade is not possible, the wor= karound below can mitigate the risk:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
DROP FUNCTION anon.get_tablesample_ratio(OID);

For more details see issue 616 (CVE-2026-2360) and issue 617 (CVE-2026-2361).

Deprecations and Removed Featur= es

This major comes with a series of breaking = changes, in particular:

  • PostgreSQL 13 i= s not supported anymore
  • Legacy Static M= asking was deprecated since version 2.0 and it is now fully removed
  • The anon.= pg_masking_rules view is replaced by anon.{all|sys|user}_rules=
  • Support for RHE= L 8 is now deprecated and we plan to fully remove it in version 4.0 in 2027

For upgrade instructions, please refer to t= he UPGRADE sectio= n in the documentation.

Acknowledgments

This release also includes code, bugfixes, = documentation, code reviews and ideas from Pierre-Marie Petit, Benoit Lobr=C3=A9au, Robin Portigliatti, Ludovic G= ilbon and other co= ntributors.

We would like to thanks the people at Efluid who helped us with their ideas, comments and testing.

And also special thanks to the PGRX team for their amazing work!

Join our community to improve d= ata privacy!

PostgreSQL Anonymizer is part of the Dalibo Labs initiative. It is mainly developed by Damien Clochard.

This is an open project, contributions are = welcome. We need your feedback and ideas! Let us know what you think of this tool, how it fits your needs and what features are missing.

If you want to help, you can find a list of=
This email was sent to you from Dalibo. It was delivered on their behalf by the PostgreSQL project. Any questions about the content of the message shou= ld be sent to Dalibo.

You were sent this email as a subscriber of the pgsql-announce mai= linglist, for the content tag Related Open Source. To unsubscribe from further emails, or change which emails you want to receive, please click th= e personal unsubscribe link that you can find in the headers of this email, or visit https://lists.postgresql.org/unsubscribe/.

 
--===============8111982732651028267==--