{"id":40502924,"url":"https://github.com/rodo/pg_expulo","last_synced_at":"2026-01-20T19:11:41.876Z","repository":{"id":224180812,"uuid":"762645327","full_name":"rodo/pg_expulo","owner":"rodo","description":"PostgreSQL tool for extracting, anonymising and loading data","archived":false,"fork":false,"pushed_at":"2024-03-20T21:47:54.000Z","size":190,"stargazers_count":2,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-04-16T07:03:09.900Z","etag":null,"topics":["anonymization","etl","postgresql"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rodo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-24T09:39:30.000Z","updated_at":"2024-03-12T10:59:20.000Z","dependencies_parsed_at":"2024-03-20T22:02:47.523Z","dependency_job_id":null,"html_url":"https://github.com/rodo/pg_expulo","commit_stats":null,"previous_names":["rodo/expulo","rodo/pg_expulo"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/rodo/pg_expulo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodo%2Fpg_expulo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodo%2Fpg_expulo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodo%2Fpg_expulo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodo%2Fpg_expulo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rodo","download_url":"https://codeload.github.com/rodo/pg_expulo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodo%2Fpg_expulo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28609879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T18:56:40.769Z","status":"ssl_error","status_checked_at":"2026-01-20T18:54:26.653Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anonymization","etl","postgresql"],"created_at":"2026-01-20T19:11:41.768Z","updated_at":"2026-01-20T19:11:41.857Z","avatar_url":"https://github.com/rodo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pg_expulo EXtract, PUrge, LOad\n\n\npg_expulo connect to two PostgreSQL instances, typically one in\nproduction and on in staging environement. The extraction is\nconfigured in a json file, data are read on source, data are anonymize\nwith your own rules, and load on target.\n\npg_expulo aims to be explicit, easy to use, compliant and\nefficient. It reads data only on tables you mentionned in the config\nfile, but will deal with all columns without the needs to define all\nof them. pg_expulo permits you to anonymize all your sensitive\ndata. It will load them as fast as possible with bulk insert to the\ntarget.\n\npg_expulo is able to deal with foreign keys and serial values, it will\nautomatically set the right value.\n\n## [Quickstart](doc/quickstart.md)\n\n## Usage\n\nThe two connections strings are build from env variables, you need at least these 10 variables\n\n    export PGSRCHOST=localhost\n    export PGSRCPORT=5432\n    export PGSRCUSER=rodo\n    export PGSRCPASSWORD=*****\n    export PGSRCDATABASE=source\n    export PGDSTHOST=localhost\n    export PGDSTPORT=5432\n    export PGDSTUSER=rodo\n    export PGDSTPASSWORD=******\n    export PGDSTDATABASE=destination\n\nYou can run pg_expulo without any parameter\n\n```code\npg_expulo\n```\n\nUse a specific config file\n\n```code\npg_expulo --config config/special.json\n```\n\nJust give a try to your configuration. Data will be read, inserted on target, but **ROLLBACK** at the end\n\n```code\npg_expulo --config config/special.json --test\n```\n\nYou can only purge your target with\n\n```code\npg_expulo --config config/special.json --purge\n```\n\n\n## Configuration\n\nAll configuration is done on `config.json` file which is read in the\ndirectory.\n\nThe main concept of pg_expulo is configuration is explicti at `table`\nlevel but implicit on `columns`, that means pg_expulo will only act on\ntable that are declared in configuration. On column side pg_expulo\nwill take all columns of the table in account.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodo%2Fpg_expulo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodo%2Fpg_expulo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodo%2Fpg_expulo/lists"}