provider 자격증명 테이블 생성을 존재 검사 선행으로 전환
Some checks failed
API contract / OpenAPI type drift (push) Failing after 1m6s
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:
parent
e82fbb58e9
commit
e3a9fc717c
2 changed files with 24 additions and 0 deletions
|
|
@ -226,8 +226,19 @@ class StoredCredential:
|
||||||
|
|
||||||
|
|
||||||
async def ensure_table() -> None:
|
async def ensure_table() -> None:
|
||||||
|
"""테이블이 없을 때만 DDL을 실행한다.
|
||||||
|
|
||||||
|
앱 접속 계정(vignette_app)에는 스키마 CREATE 권한이 없다. Postgres는
|
||||||
|
``CREATE TABLE IF NOT EXISTS``가 no-op이어도 스키마 CREATE 권한을 먼저
|
||||||
|
검사하므로, 부트스트랩 SQL이 이미 만든 테이블이면 검사 없이 건너뛴다.
|
||||||
|
"""
|
||||||
pool = get_pool()
|
pool = get_pool()
|
||||||
async with pool.acquire() as conn:
|
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(
|
await conn.execute(
|
||||||
"""
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS app.admin_provider_credential (
|
CREATE TABLE IF NOT EXISTS app.admin_provider_credential (
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,19 @@ CREATE TABLE IF NOT EXISTS app.admin_engine_config (
|
||||||
ALTER TABLE app.admin_engine_config
|
ALTER TABLE app.admin_engine_config
|
||||||
ADD COLUMN IF NOT EXISTS reasoning_effort TEXT;
|
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 (
|
CREATE TABLE IF NOT EXISTS app.admin_health_event (
|
||||||
id BIGSERIAL PRIMARY KEY,
|
id BIGSERIAL PRIMARY KEY,
|
||||||
observed_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
observed_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue