599599
600600echo "Detected PG major version: $PG_MAJOR"
601601
602- if [ "$PG_MAJOR" -ge 14 ]; then
603- psql -U postgres -d postgres << SQLEOF
602+ psql -U postgres -d postgres << SQLEOF
603+ \getenv analytics_password ANALYTICS_PASSWORD
604604DO \$\$
605605BEGIN
606606 IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${{ANALYTICS_USERNAME}}') THEN
607- CREATE ROLE ${{ANALYTICS_USERNAME}} WITH LOGIN PASSWORD '${{ANALYTICS_PASSWORD}}';
608- ELSE
609- ALTER ROLE ${{ANALYTICS_USERNAME}} WITH PASSWORD '${{ANALYTICS_PASSWORD}}';
607+ CREATE ROLE ${{ANALYTICS_USERNAME}} WITH LOGIN;
610608 END IF;
611609END
612610\$\$;
611+ ALTER ROLE ${{ANALYTICS_USERNAME}} WITH PASSWORD :'analytics_password';
612+ SQLEOF
613+
614+ if [ "$PG_MAJOR" -ge 14 ] && [ "{read_only}" = "true" ]; then
615+ # PG >= 14 read-only: granular read role
616+ psql -U postgres -d postgres << SQLEOF
613617GRANT pg_read_all_data TO ${{ANALYTICS_USERNAME}};
614618SQLEOF
619+ echo "Read-only mode with PG >= 14, granted pg_read_all_data"
615620
616- if [ "{read_only}" = "true" ]; then
617- echo "Read-only mode with PG >= 14, granted pg_read_all_data"
618- else
619- echo "Read-write mode with PG >= 14, granting pg_write_all_data + CREATE ON DATABASE..."
620- psql -U postgres -d postgres << SQLEOF
621+ elif [ "$PG_MAJOR" -ge 17 ] && [ "{read_only}" != "true" ]; then
622+ # PG >= 17 read-write: granular roles including pg_maintain
623+ psql -U postgres -d postgres << SQLEOF
624+ GRANT pg_read_all_data TO ${{ANALYTICS_USERNAME}};
621625GRANT pg_write_all_data TO ${{ANALYTICS_USERNAME}};
626+ GRANT pg_maintain TO ${{ANALYTICS_USERNAME}};
622627DO \$\$
623628DECLARE
624629 dbname text;
@@ -630,19 +635,13 @@ BEGIN
630635END
631636\$\$;
632637SQLEOF
633- fi
638+ echo "Read-write mode with PG >= 17, granted pg_read_all_data + pg_write_all_data + pg_maintain + CREATE ON DATABASE"
639+
634640else
635- echo "PG < 14, granting superuser to analytics user..."
641+ # PG < 14, or PG 14-16 read-write: superuser
642+ echo "Granting superuser to analytics user (PG < 17 read-write or PG < 14)..."
636643 psql -U postgres -d postgres << SQLEOF
637- DO \$\$
638- BEGIN
639- IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${{ANALYTICS_USERNAME}}') THEN
640- CREATE ROLE ${{ANALYTICS_USERNAME}} WITH LOGIN SUPERUSER PASSWORD '${{ANALYTICS_PASSWORD}}';
641- ELSE
642- ALTER ROLE ${{ANALYTICS_USERNAME}} WITH SUPERUSER PASSWORD '${{ANALYTICS_PASSWORD}}';
643- END IF;
644- END
645- \$\$;
644+ ALTER ROLE ${{ANALYTICS_USERNAME}} WITH SUPERUSER;
646645SQLEOF
647646fi
648647echo "Writing restore metadata..."
0 commit comments