chore(db): consolidate unreleased migrations

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Zyy
2026-11-07 00:48:32 +08:00
co-authored by Codex
parent 0d25061ef0
commit 228eea90c1
5 changed files with 72 additions and 72 deletions
+1 -3
View File
@@ -36,6 +36,4 @@ bd73379456839e8a12d7591ad2a839901af0f5ba27871248569abdfa26bc83ef 0035_cpr_link_
d05442ee4cb85db8131e015dbed9c6ad988f93306abcda34647317674857ee44 0036_account_display_names.sql
b215ea90d5c8753aeb8192b17ffe65f7a95c1d620aaeaf9fc4337d8cf6f2634e 0037_retry_after_wait_limit.sql
321f4a09367717eb13c3cf5dbfd1f4b014e31c615a74bf6e3b09b8e810d87198 0038_preserve_client_key_ledger.sql
80ba91cad23667ace80a43daf905ca78fd0f6de5fb57f444c9ebbfa2fab90c34 0039_queue_timeouts.sql
2438e107835cd69effdb37e4d008b3b631a287da9e41185b04dd239449cb6733 0040_quota_credit_policy.sql
825b9144f369eca39439d7da27f477915bd904c3df90940108d8a37fcc129bac 0041_client_key_installation_seed.sql
a6b4e81d38e5d70776a75eba22749354573ebcb186160ff9eb45fd91157b3e0d 0039_queue_timeouts_quota_credits_and_installation_seed.sql
@@ -1,10 +0,0 @@
-- 两层排队分别沿用实例已配置的时限,账号队满或超时默认返回错误
ALTER TABLE runtime_settings
RENAME COLUMN concurrency_wait_timeout_seconds TO key_queue_timeout_seconds;
ALTER TABLE runtime_settings
ADD COLUMN account_queue_timeout_seconds BIGINT NOT NULL DEFAULT 30
CHECK (account_queue_timeout_seconds BETWEEN 1 AND 120),
ADD COLUMN switch_account_on_queue_failure BOOLEAN NOT NULL DEFAULT FALSE;
UPDATE runtime_settings SET account_queue_timeout_seconds = key_queue_timeout_seconds;
@@ -0,0 +1,71 @@
-- 两层排队分别沿用实例已配置的时限,账号队满或超时默认返回错误
ALTER TABLE runtime_settings
RENAME COLUMN concurrency_wait_timeout_seconds TO key_queue_timeout_seconds;
ALTER TABLE runtime_settings
ADD COLUMN account_queue_timeout_seconds BIGINT NOT NULL DEFAULT 30
CHECK (account_queue_timeout_seconds BETWEEN 1 AND 120),
ADD COLUMN switch_account_on_queue_failure BOOLEAN NOT NULL DEFAULT FALSE;
UPDATE runtime_settings SET account_queue_timeout_seconds = key_queue_timeout_seconds;
alter table provider_accounts
add column auto_use_quota_credits boolean not null default false,
drop constraint provider_accounts_quota_evidence_ck,
drop constraint provider_accounts_quota_fact_ck,
add constraint provider_accounts_quota_evidence_ck check (
quota_evidence in ('provider_denied', 'account_limit_reached', 'usage_limit_reached', 'payment_required', 'credits_available')
),
add constraint provider_accounts_quota_fact_ck check (
(quota_access_state = 'unknown' and quota_evidence is null and quota_reset_at is null)
or (quota_access_state = 'allowed' and quota_access_observed_at is not null
and ((quota_evidence is null and quota_reset_at is null) or quota_evidence is not distinct from 'credits_available'))
or (quota_access_state = 'exhausted' and quota_evidence is not null and quota_evidence <> 'credits_available' and quota_access_observed_at is not null)
);
-- 在行锁内按当前配置投影仅点数可用的观测,晚返回的查询不能覆盖关闭开关的决定
create function apply_quota_credit_policy() returns trigger language plpgsql as $$
begin
new.quota_access_state := 'exhausted';
new.quota_evidence := 'account_limit_reached';
return new;
end
$$;
create trigger provider_accounts_quota_credit_policy
before insert or update of auto_use_quota_credits, quota_evidence, quota_access_state on provider_accounts
for each row when (not new.auto_use_quota_credits and new.quota_evidence = 'credits_available') execute function apply_quota_credit_policy();
-- Key 安装身份只保存种子,现有安装 ID 转为种子后按 Key 与账号重新派生
WITH migrated AS (
UPDATE client_api_keys
SET provider_request_profiles_json = jsonb_set(
provider_request_profiles_json,
'{openai}',
CASE
WHEN provider_request_profiles_json #> '{openai,inherit}' ? 'installationId'
THEN jsonb_set(
provider_request_profiles_json -> 'openai',
'{inherit}',
((provider_request_profiles_json #> '{openai,inherit}') - 'installationId')
|| jsonb_build_object(
'installationSeed',
provider_request_profiles_json #> '{openai,inherit,installationId}'
)
)
ELSE ((provider_request_profiles_json -> 'openai') - 'installationId')
|| jsonb_build_object(
'installationSeed',
provider_request_profiles_json #> '{openai,installationId}'
)
END
),
updated_at = GREATEST(now(), updated_at)
WHERE provider_request_profiles_json -> 'openai' ? 'installationId'
OR provider_request_profiles_json #> '{openai,inherit}' ? 'installationId'
RETURNING id
)
UPDATE runtime_settings
SET config_revision = config_revision + 1,
updated_at = GREATEST(now(), updated_at)
WHERE EXISTS (SELECT 1 FROM migrated);
@@ -1,26 +0,0 @@
alter table provider_accounts
add column auto_use_quota_credits boolean not null default false,
drop constraint provider_accounts_quota_evidence_ck,
drop constraint provider_accounts_quota_fact_ck,
add constraint provider_accounts_quota_evidence_ck check (
quota_evidence in ('provider_denied', 'account_limit_reached', 'usage_limit_reached', 'payment_required', 'credits_available')
),
add constraint provider_accounts_quota_fact_ck check (
(quota_access_state = 'unknown' and quota_evidence is null and quota_reset_at is null)
or (quota_access_state = 'allowed' and quota_access_observed_at is not null
and ((quota_evidence is null and quota_reset_at is null) or quota_evidence is not distinct from 'credits_available'))
or (quota_access_state = 'exhausted' and quota_evidence is not null and quota_evidence <> 'credits_available' and quota_access_observed_at is not null)
);
-- 在行锁内按当前配置投影仅点数可用的观测,晚返回的查询不能覆盖关闭开关的决定
create function apply_quota_credit_policy() returns trigger language plpgsql as $$
begin
new.quota_access_state := 'exhausted';
new.quota_evidence := 'account_limit_reached';
return new;
end
$$;
create trigger provider_accounts_quota_credit_policy
before insert or update of auto_use_quota_credits, quota_evidence, quota_access_state on provider_accounts
for each row when (not new.auto_use_quota_credits and new.quota_evidence = 'credits_available') execute function apply_quota_credit_policy();
@@ -1,33 +0,0 @@
-- Key 安装身份只保存种子,现有安装 ID 转为种子后按 Key 与账号重新派生
WITH migrated AS (
UPDATE client_api_keys
SET provider_request_profiles_json = jsonb_set(
provider_request_profiles_json,
'{openai}',
CASE
WHEN provider_request_profiles_json #> '{openai,inherit}' ? 'installationId'
THEN jsonb_set(
provider_request_profiles_json -> 'openai',
'{inherit}',
((provider_request_profiles_json #> '{openai,inherit}') - 'installationId')
|| jsonb_build_object(
'installationSeed',
provider_request_profiles_json #> '{openai,inherit,installationId}'
)
)
ELSE ((provider_request_profiles_json -> 'openai') - 'installationId')
|| jsonb_build_object(
'installationSeed',
provider_request_profiles_json #> '{openai,installationId}'
)
END
),
updated_at = GREATEST(now(), updated_at)
WHERE provider_request_profiles_json -> 'openai' ? 'installationId'
OR provider_request_profiles_json #> '{openai,inherit}' ? 'installationId'
RETURNING id
)
UPDATE runtime_settings
SET config_revision = config_revision + 1,
updated_at = GREATEST(now(), updated_at)
WHERE EXISTS (SELECT 1 FROM migrated);