Skip to main content

pg_stage

A utility for generating a database dump, the data in which will be obfuscated. This dump can be used in development and stage servers without fear of their theft.

Content

How does it work?

The utility processes the output of the pg_dump command line by line and decides whether to obfuscate data at the level of comments to a table or column.

Usage example

  1. You need to create a file with approximately the following contents:
# main.py
from pg_stage.obfuscators.plain import PlainObfuscator
from pg_stage.obfuscators.custom import CustomObfuscator

# Initialize obfuscator based on dump format
# Use PlainObfuscator for default SQL text format
# Use CustomObfuscator for custom format dumps (pg_dump -Fc)
obfuscator = PlainObfuscator(locale='ru_RU')  # or CustomObfuscator(locale='ru_RU')
obfuscator.run()
  1. Add comments to a column or table:
COMMENT ON COLUMN table_1.first_name IS 'anon: [{"mutation_name": "first_name"}]';
  1. Run pg_dump and redirect the stream to the running script process:
# Run pg_dump with appropriate format and pipe to main.py for obfuscation
# For PlainObfuscator: use default SQL text format
pg_dump -d database | python3 main.py > backup.sql

# For CustomObfuscator: use custom format (-Fc)
pg_dump -Fc -d database | python3 main.py > backup.dump
  1. After that you will get the obfuscated data in the table

Supported types of obfuscation

You can see the current list here.

Why did I write my utility?

I also adhere to the rule that you do not need to place third-party plugins in the working database for its security (most utilities are in the form of database extensions).

Also, in similar utilities, I could not find the functionality for uniform obfuscation of data in related tables. This prompted me to write my own utility that will be able to obfuscate data in related tables with the same result by a foreign key.

Example:

COMMENT ON COLUMN table_1.first_name IS 'anon: [{"mutation_name": "first_name", "relations": [{"table_name": "table_1", "column_name": "last_name", "from_column_name": "id", "to_column_name": "id"}]}]';

where relations - links on tables where it is necessary to obfuscate fields according to the current field.

Thanks for the inspiration

Metadata

Release files for pg-stage 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pg-stage 0.4.1
File Size Uploaded
pg_stage-0.4.1.tar.gz 25.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pg-stage 0.4.1
File Interpreter ABI Platform
pg_stage-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 44.1 kB

Release files / pg_stage-0.4.1.tar.gz

Download URL pg_stage-0.4.1.tar.gz
Size 25.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8024b53a5b97f4d23de329866ceb784194c687d448822af2401ed3c123c12f78
BLAKE2b-256 checksum
How to use checksums
705a99faa2ffb65388165562aed9f0e4e64183ccbab878392a3fbd2ad70a2fd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.9.2

Release files / pg_stage-0.4.1-py3-none-any.whl

Download URL pg_stage-0.4.1-py3-none-any.whl
Size 18.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
606ab029a24449de19d21f09179932055e7641d4c0709a3d50608876da347966
BLAKE2b-256 checksum
How to use checksums
1dc65d1d48011c2923e5a88a4162fbf31fef17265f447b620aed52f77b24a753
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.9.2

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page