diff --git a/scripts/sql/expense_db_init.sql b/scripts/sql/expense_db_init.sql index 9d4007f..6ddfe7f 100644 --- a/scripts/sql/expense_db_init.sql +++ b/scripts/sql/expense_db_init.sql @@ -24,14 +24,16 @@ WHERE NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'expense_db') \gexec -- 앱 전용 로그인 역할 -DO $$ -BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'expense_app') THEN - EXECUTE format('CREATE ROLE expense_app LOGIN PASSWORD %L', :'app_password'); - ELSE - EXECUTE format('ALTER ROLE expense_app WITH LOGIN PASSWORD %L', :'app_password'); - END IF; -END$$; +-- psql 변수(:'app_password')는 dollar-quoted 블록 안에서 치환되지 않으므로 +-- DO 블록을 쓰지 않고 \gexec 로 동적 SQL 을 생성·실행한다. + +SELECT 'CREATE ROLE expense_app LOGIN PASSWORD ' || quote_literal(:'app_password') +WHERE NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'expense_app') +\gexec + +-- 항상 최신 비밀번호로 동기화 +SELECT 'ALTER ROLE expense_app WITH LOGIN PASSWORD ' || quote_literal(:'app_password') +\gexec GRANT CONNECT ON DATABASE expense_db TO expense_app;