Idempotent SQL for role and database creation, split between the
postgres-database scope (bootstrap.sql) and the moments-database
scope (bootstrap-moments.sql), since CREATE DATABASE can't run
inside a DO block or transaction.
Roles:
moments_rw — owner of the moments database; runs migrations
and writes events from moments-worker.
moments_ro — read-only; consumed by moments-api.
The pg_ident template is rendered per-host by deploy.sh once it
lands; one (host, role) mapping per file. Reload required on both
magrathea and frankie after install — pg_ident is not replicated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
18 lines
806 B
SQL
18 lines
806 B
SQL
-- In-database grants for the moments database.
|
|
-- Run after asset/sql/bootstrap.sql, against the moments database.
|
|
-- Idempotent — safe to re-run on every deploy.
|
|
--
|
|
-- psql -h magrathea.kosherinata.internal -U postgres -d moments \
|
|
-- -f asset/sql/bootstrap-moments.sql
|
|
--
|
|
-- The schema itself is created by sqlx migrations executed by moments-api
|
|
-- on startup (which runs as moments_rw, the database owner). This file
|
|
-- only manages the read-only role's access to whatever moments_rw creates.
|
|
|
|
GRANT USAGE ON SCHEMA public TO moments_ro;
|
|
GRANT SELECT ON ALL TABLES IN SCHEMA public TO moments_ro;
|
|
|
|
-- Tables created later by moments_rw (running migrations) inherit SELECT for moments_ro.
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE moments_rw IN SCHEMA public
|
|
GRANT SELECT ON TABLES TO moments_ro;
|