Custom Docker image based on bitnami/postgresql that setups pgaudit to log writes on a single table.
Base image bitnami/postgresql was chosen because it ships bundled with pgaudit.
Change directory to the root of this repository and run docker compose up --build.
The logs will be bind-mounted to a folder called logs/, if it does not exist it will be created.
Anytime you try to edit test_db.public.table_with_audit you will see audit logs printed to stdout.
Changes to test_db.public.test_without_audit will not generate any audit logs.
You can use the pgAdmin instance included and pre-configured in the docker-compose.yml to mess with the database.
The file cfg/99_logging.conf configures PostgreSQL logging and configures where the log files will be stored.
I've chose to use the folder /bitnami/postgresql/logs, if you change it remember to update the bind mounts in docker-compose.
To configure auditing rules refer to the official documentation but you can find an example of object audit logging in scripts/02_configure_audit.sql.
Remember that PostgreSQL pre-configuration is executed only once and skipped if PostgreSQL data already exists. If you make changes to the scripts/ and don't see any changes remember to destroy any volumes left over.
See official bitnami/postgresql docs for further explanations on why files have been copied to specific folders.
2022-08-19 07:54:31.204 GMT [163] LOG: AUDIT: OBJECT,1,1,WRITE,INSERT,TABLE,public.table_with_audit,"INSERT INTO public.table_with_audit (
id, column_1, column_2) VALUES (
'b123c109-1246-4433-a270-b98d39a97185'::uuid, 'sadasdasdas'::character varying, 'asdasdasdasda'::character varying)
returning id;",<not logged>