fix(expense-db): psql 변수가 DO 블록 내에서 치환되지 않는 문제 수정
dollar-quoted ($$...$$) 안의 :'app_password' 는 psql 이 치환하지 않아 서버에서 syntax error 발생. DO 블록을 제거하고 \gexec 로 동적 SQL 생성. - CREATE ROLE: 미존재 시에만 - ALTER ROLE: 비밀번호 항상 동기화
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user