-- Eseguito una sola volta, al primo avvio con volume dati vuoto -- (docker-entrypoint-initdb.d, come superuser POSTGRES_USER). -- Le credenziali arrivano dalle variabili d'ambiente del container via \getenv (psql >= 15). \set ON_ERROR_STOP on \getenv app_db_name APP_DB_NAME \getenv app_db_user APP_DB_USER \getenv app_db_password APP_DB_PASSWORD \getenv medusa_db_name MEDUSA_DB_NAME \getenv medusa_db_user MEDUSA_DB_USER \getenv medusa_db_password MEDUSA_DB_PASSWORD -- Utenti distinti per app custom e Medusa CREATE ROLE :"app_db_user" LOGIN PASSWORD :'app_db_password'; CREATE ROLE :"medusa_db_user" LOGIN PASSWORD :'medusa_db_password'; -- Database, ciascuno di proprietà del rispettivo utente -- (in PG16 lo schema public appartiene a pg_database_owner, quindi l'owner del DB ci può creare tabelle) CREATE DATABASE :"app_db_name" OWNER :"app_db_user" ENCODING 'UTF8' TEMPLATE template0; CREATE DATABASE :"medusa_db_name" OWNER :"medusa_db_user" ENCODING 'UTF8' TEMPLATE template0; REVOKE ALL ON DATABASE :"app_db_name" FROM PUBLIC; REVOKE ALL ON DATABASE :"medusa_db_name" FROM PUBLIC; -- Database dei test automatici di apps/api (_test, stesso utente): -- i test lo svuotano a ogni esecuzione, mai puntarli sul DB applicativo. SELECT format('%s_test', :'app_db_name') AS app_test_db_name \gset CREATE DATABASE :"app_test_db_name" OWNER :"app_db_user" ENCODING 'UTF8' TEMPLATE template0; REVOKE ALL ON DATABASE :"app_test_db_name" FROM PUBLIC; -- Estensioni del DB applicativo e di quello di test (create da superuser: postgis non è "trusted") \connect :"app_db_name" CREATE EXTENSION IF NOT EXISTS postgis; CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE EXTENSION IF NOT EXISTS unaccent; \connect :"app_test_db_name" CREATE EXTENSION IF NOT EXISTS postgis; CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE EXTENSION IF NOT EXISTS unaccent;