provider 자격증명 테이블 생성을 존재 검사 선행으로 전환
Some checks failed
API contract / OpenAPI type drift (push) Failing after 1m6s

앱 DB 계정에는 스키마 CREATE 권한이 없어 런타임 CREATE TABLE IF NOT
EXISTS가 테이블이 이미 있어도 권한 거부로 실패한다(운영 실측). to_regclass
존재 검사를 먼저 하고, 부트스트랩 SQL(05_runtime_auth.sql)에 DDL을 추가해
신규 볼륨에서도 소유자가 테이블을 만들도록 한다.
This commit is contained in:
Yun Chan 2026-09-11 16:56:02 +09:00
parent e82fbb58e9
commit e3a9fc717c
2 changed files with 24 additions and 0 deletions

View file

@ -226,8 +226,19 @@ class StoredCredential:
async def ensure_table() -> None:
"""테이블이 없을 때만 DDL을 실행한다.
접속 계정(vignette_app)에는 스키마 CREATE 권한이 없다. Postgres는
``CREATE TABLE IF NOT EXISTS`` no-op이어도 스키마 CREATE 권한을 먼저
검사하므로, 부트스트랩 SQL이 이미 만든 테이블이면 검사 없이 건너뛴다.
"""
pool = get_pool()
async with pool.acquire() as conn:
exists = await conn.fetchval(
"SELECT to_regclass('app.admin_provider_credential') IS NOT NULL"
)
if exists:
return
await conn.execute(
"""
CREATE TABLE IF NOT EXISTS app.admin_provider_credential (

View file

@ -79,6 +79,19 @@ CREATE TABLE IF NOT EXISTS app.admin_engine_config (
ALTER TABLE app.admin_engine_config
ADD COLUMN IF NOT EXISTS reasoning_effort TEXT;
CREATE TABLE IF NOT EXISTS app.admin_provider_credential (
provider TEXT PRIMARY KEY,
token_encrypted TEXT NOT NULL,
token_hint TEXT NOT NULL DEFAULT '',
auth_kind TEXT NOT NULL DEFAULT 'api_key'
CHECK (auth_kind IN ('api_key','oauth_token')),
updated_by TEXT,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
last_verified_at TIMESTAMPTZ,
last_verify_ok BOOLEAN,
last_verify_error TEXT
);
CREATE TABLE IF NOT EXISTS app.admin_health_event (
id BIGSERIAL PRIMARY KEY,
observed_at TIMESTAMPTZ NOT NULL DEFAULT now(),