Files
dzentra_bot/infra/docker/postgres/healthcheck-application-role.sh

49 lines
1.2 KiB
Bash

#!/bin/sh
set -eu
role_status="$(
psql \
--no-psqlrc \
--set ON_ERROR_STOP=1 \
--tuples-only \
--no-align \
--username "$POSTGRES_USER" \
--dbname "$POSTGRES_DB" <<'SQL'
\getenv app_user APP_DB_USER
SELECT CASE
WHEN :'app_user' <> current_user
AND EXISTS (
SELECT 1
FROM pg_catalog.pg_roles
WHERE rolname = :'app_user'
AND rolcanlogin
AND NOT rolsuper
AND NOT rolcreatedb
AND NOT rolcreaterole
AND rolinherit
AND NOT rolreplication
AND NOT rolbypassrls
)
AND pg_catalog.pg_get_userbyid((
SELECT datdba
FROM pg_catalog.pg_database
WHERE datname = current_database()
)) = :'app_user'
AND NOT EXISTS (
SELECT 1
FROM pg_catalog.pg_auth_members AS membership
JOIN pg_catalog.pg_roles AS member_role
ON member_role.oid = membership.member
WHERE member_role.rolname = :'app_user'
)
THEN 1
ELSE 0
END;
SQL
)"
test "$role_status" = "1"