anon
pg_anon : PostgreSQL Anonymizer (anon) extension
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 7070 | anon | pg_anon | 3.2.3 |
SEC | PostgreSQL | Rust |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
| --sLd-- | No | Yes | Yes | Yes | no | no |
| Relationships | |
|---|---|
| Schemas | anon |
| See Also | column_encrypt pg_tde supabase_vault pg_enigma pgsodium pgcryptokey |
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY | 3.2.3 |
18 17 16 15 14 | pg_anon |
- |
| RPM | PIGSTY | 3.2.3 |
18 17 16 15 14 | pg_anon_$v |
- |
| DEB | PIGSTY | 3.2.3 |
18 17 16 15 14 | postgresql-$v-pg-anon |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| el8.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| el9.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| el9.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| el10.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| el10.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| d12.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| d12.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| d13.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| d13.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| u22.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| u22.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| u24.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| u24.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| u26.x86_64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
| u26.aarch64 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 | PIGSTY 3.2.3 |
Source
gitlab.com/dalibo/postgresql_anonymizer/
postgresql_anonymizer-3.2.3.tar.gz
Install
Make sure PGDG and PIGSTY repo available:
Install this extension with pig:
Config this extension to shared_preload_libraries:
Create this extension with:
Usage
Sources:
- PostgreSQL Anonymizer 3.2.3 README
- Masking functions
- 3.2.3 changelog
- Official documentation
- 3.2.3 upgrade guide
- 3.2 series release announcement
anon is PostgreSQL Anonymizer. It applies declarative masking rules for protected query access, produces anonymized data sets, and provides pseudonymization and randomized-response helpers. Use it when realistic data must remain useful without exposing the original sensitive values; treat masking policy, role grants, and access to the unmasked database as part of the security boundary.
Core Workflow
Load anon for sessions in the target database, install the extension, and enable transparent dynamic masking. New connections pick up database-level settings.
Mark a login as masked and attach masking rules to sensitive columns:
Queries made as reporting see the transformed values. Privileged users still see the originals, so do not grant masked roles a path around the policy.
Masking Strategies
- Dynamic masking transforms results for roles labeled
MASKEDwithout rewriting the table. - Static masking permanently rewrites selected data and is appropriate for disposable development or test copies.
- Anonymous dumps and replicas produce sanitized exports or downstream copies.
- Masking views and data wrappers expose a deliberately reduced or transformed projection.
- Pseudonymization uses deterministic transforms when joins or repeated values must remain consistent.
Important Objects
anon.dummy_*,anon.random_*, andanon.partial(...)generate or partially conceal values.anon.hash(text)andanon.digest(text, text, text)provide deterministic transformations. In 3.1.2 they were markedRESTRICTEDto limit brute-force exposure.anon.ldp_grrm(value, epsilon, max_v)andanon.ldp_grrm_pttt(value, truth_probability, max_v)implement generalized randomized response for local differential privacy.anon.ldp_truth_probability(...)andanon.ldp_lie_probability(...)help inspect randomized-response probabilities.- Security labels on roles and columns define who is masked and how each value is transformed.
Operational Notes
anon is superuser-installed and non-relocatable. Test every policy with the same grants and connection path used by the intended consumer. Randomization is not automatically deterministic; use a confirmed pseudonymization function when stable equality is required. Static anonymization is destructive, so run it on a copy and verify constraints and application behavior afterward.
Version 3.2.0 introduces localized deterministic anon.seeded_* functions; the older anon.pseudo_* family is deprecated. It fixes three upstream-reported security vulnerabilities and defaults to refusing masking operations executed by superusers. Use a dedicated non-superuser masking role. Setting anon.nosuperuser to false removes that barrier and is not the recommended upgrade path. The masking-rule JSON format changed; re-export rules after upgrading. This documentation describes release 3.2.3.
Version 3.2.3 is a security update for CVE-2026-97469: dynamic masking now checks for RESTRICTED functions inside subqueries. Upgrade the installed library, then follow the upstream drop-and-recreate procedure in each database; ALTER EXTENSION ... UPDATE is unsupported. Preserve and migrate masking rules before recreating the extension; review masked-role queries that previously reached restricted functions through subqueries.