Files
Aether/crates/aether-data/adapters/postgres/migrations/20260403000000_baseline.sql
T
elky 579f2c7cc1 feat(security): harden gateway boundaries and usage policies
Consolidate subscription usage policy enforcement, privacy-safe persistence, and gateway security hardening into one reviewable change.

Includes bounded HTTP and execution envelopes, header and protocol guards, DNS and relay validation, authentication and secret projection hardening, secure backup/install paths, and regression coverage.
2026-09-04 03:45:52 +08:00

4721 lines
130 KiB
SQL

-- Idempotent schema initial migration.
--
-- Purpose:
-- Build the complete public schema from scratch for newly provisioned
-- databases. This migration is fully idempotent: every CREATE/ALTER is
-- guarded, so existing databases that already carry the full schema
-- (upgraded from the Python/alembic era) will simply no-op on each
-- statement and this migration gets recorded as applied.
--
-- Source:
-- Generated from `pg_dump --schema-only` of the known-good production
-- schema (matching alembic revision c3d4e5f6a7b8) and then mechanically
-- rewritten to be idempotent via DO blocks that swallow duplicate_object
-- / duplicate_table exceptions. See scripts/dev/ (if present) or the
-- commit that introduced this file for the generator script.
--
-- Ordering:
-- Runs before 20260403000000_baseline.sql so that fresh databases have a
-- complete schema by the time baseline (a no-op handoff point) and all
-- later ADD COLUMN IF NOT EXISTS migrations execute.
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', true);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: authsource; Type: TYPE; Schema: public; Owner: -
--
DO $mig$ BEGIN
CREATE TYPE public.authsource AS ENUM (
'local',
'ldap',
'oauth'
);
EXCEPTION WHEN duplicate_object THEN NULL;
END $mig$;
--
-- Name: providerbillingtype; Type: TYPE; Schema: public; Owner: -
--
DO $mig$ BEGIN
CREATE TYPE public.providerbillingtype AS ENUM (
'monthly_quota',
'pay_as_you_go',
'free_tier'
);
EXCEPTION WHEN duplicate_object THEN NULL;
END $mig$;
--
-- Name: proxynodestatus; Type: TYPE; Schema: public; Owner: -
--
DO $mig$ BEGIN
CREATE TYPE public.proxynodestatus AS ENUM (
'online',
'unhealthy',
'offline'
);
EXCEPTION WHEN duplicate_object THEN NULL;
END $mig$;
--
-- Name: userrole; Type: TYPE; Schema: public; Owner: -
--
DO $mig$ BEGIN
CREATE TYPE public.userrole AS ENUM (
'admin',
'user'
);
EXCEPTION WHEN duplicate_object THEN NULL;
END $mig$;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: announcement_reads; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.announcement_reads (
id character varying(36) NOT NULL,
user_id character varying(36) NOT NULL,
announcement_id character varying(36) NOT NULL,
read_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: announcements; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.announcements (
id character varying(36) NOT NULL,
title character varying(200) NOT NULL,
content text NOT NULL,
type character varying(20) DEFAULT 'info'::character varying,
priority integer DEFAULT 0,
author_id character varying(36),
is_active boolean DEFAULT true,
is_pinned boolean DEFAULT false,
start_time timestamp with time zone,
end_time timestamp with time zone,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: api_key_provider_mappings; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.api_key_provider_mappings (
id character varying(36) NOT NULL,
api_key_id character varying(36) NOT NULL,
provider_id character varying(36) NOT NULL,
priority_adjustment integer DEFAULT 0,
weight_multiplier double precision DEFAULT '1'::double precision,
is_enabled boolean DEFAULT true NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: api_keys; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.api_keys (
id character varying(36) NOT NULL,
user_id character varying(36) NOT NULL,
key_hash character varying(64) NOT NULL,
key_encrypted text,
name character varying(100),
key_prefix character varying(64),
status character varying(64) DEFAULT 'active'::character varying NOT NULL,
total_requests integer DEFAULT 0,
total_cost_usd numeric(20,8) DEFAULT '0'::double precision,
is_standalone boolean DEFAULT false NOT NULL,
allowed_providers json,
allowed_api_formats json,
allowed_models json,
rate_limit integer DEFAULT 100,
concurrent_limit integer,
force_capabilities json,
is_active boolean DEFAULT true NOT NULL,
last_used_at timestamp with time zone,
expires_at timestamp with time zone,
auto_delete_on_expiry boolean DEFAULT false NOT NULL,
metadata json,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
is_locked boolean DEFAULT false NOT NULL,
CONSTRAINT ck_api_keys_standalone_not_locked CHECK (((NOT is_standalone) OR (NOT is_locked)))
);
--
-- Name: audit_logs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.audit_logs (
id character varying(36) NOT NULL,
event_type character varying(50) NOT NULL,
user_id character varying(36),
api_key_id character varying(36),
description text NOT NULL,
ip_address character varying(45),
user_agent character varying(500),
request_id character varying(100),
event_metadata json,
status_code integer,
error_message text,
created_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: billing_rules; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.billing_rules (
id character varying(36) NOT NULL,
global_model_id character varying(36),
model_id character varying(36),
name character varying(100) NOT NULL,
task_type character varying(20) DEFAULT 'chat'::character varying NOT NULL,
expression text NOT NULL,
variables jsonb DEFAULT '{}'::jsonb NOT NULL,
dimension_mappings jsonb DEFAULT '{}'::jsonb NOT NULL,
is_enabled boolean DEFAULT true NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT chk_billing_rules_model_ref CHECK ((((global_model_id IS NOT NULL) AND (model_id IS NULL)) OR ((global_model_id IS NULL) AND (model_id IS NOT NULL))))
);
--
-- Name: dimension_collectors; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.dimension_collectors (
id character varying(36) NOT NULL,
api_format character varying(50) NOT NULL,
task_type character varying(20) NOT NULL,
dimension_name character varying(100) NOT NULL,
source_type character varying(20) NOT NULL,
source_path character varying(200),
value_type character varying(20) DEFAULT 'float'::character varying NOT NULL,
transform_expression text,
default_value character varying(100),
priority integer DEFAULT 0 NOT NULL,
is_enabled boolean DEFAULT true NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT chk_dimension_collectors_source_config CHECK (((((source_type)::text = 'computed'::text) AND (source_path IS NULL) AND (transform_expression IS NOT NULL)) OR (((source_type)::text <> 'computed'::text) AND (source_path IS NOT NULL))))
);
--
-- Name: gemini_file_mappings; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.gemini_file_mappings (
id character varying(36) NOT NULL,
file_name character varying(255) NOT NULL,
key_id character varying(36) NOT NULL,
user_id character varying(36),
display_name character varying(255),
mime_type character varying(100),
source_hash character varying(64),
created_at timestamp with time zone NOT NULL,
expires_at timestamp with time zone NOT NULL
);
--
-- Name: global_models; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.global_models (
id character varying(36) NOT NULL,
name character varying(100) NOT NULL,
display_name character varying(100),
enabled boolean DEFAULT true NOT NULL,
default_price_per_request numeric(20,8),
default_tiered_pricing json,
supported_capabilities json,
is_active boolean DEFAULT true NOT NULL,
usage_count integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
config jsonb,
metadata json
);
--
-- Name: ldap_configs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.ldap_configs (
id integer NOT NULL,
server_url character varying(255) NOT NULL,
bind_dn text NOT NULL,
bind_password_encrypted text,
base_dn text NOT NULL,
user_search_filter text DEFAULT '(uid={username})'::character varying NOT NULL,
username_attr character varying(50) DEFAULT 'uid'::character varying NOT NULL,
email_attr character varying(50) DEFAULT 'mail'::character varying NOT NULL,
display_name_attr character varying(50) DEFAULT 'cn'::character varying NOT NULL,
is_enabled boolean DEFAULT false NOT NULL,
is_exclusive boolean DEFAULT false NOT NULL,
use_starttls boolean DEFAULT false NOT NULL,
connect_timeout integer DEFAULT 10 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: ldap_configs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS public.ldap_configs_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: ldap_configs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.ldap_configs_id_seq OWNED BY public.ldap_configs.id;
--
-- Name: management_tokens; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.management_tokens (
id character varying(36) NOT NULL,
user_id character varying(36) NOT NULL,
token_hash character varying(64) NOT NULL,
token_prefix character varying(12),
name character varying(100) NOT NULL,
description text,
allowed_ips jsonb,
permissions jsonb,
expires_at timestamp with time zone,
last_used_at timestamp with time zone,
last_used_ip character varying(45),
usage_count integer DEFAULT 0 NOT NULL,
is_active boolean DEFAULT true NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT check_allowed_ips_not_empty CHECK (CASE WHEN ((allowed_ips IS NULL) OR (allowed_ips = 'null'::jsonb)) THEN true WHEN (jsonb_typeof(allowed_ips) = 'array'::text) THEN (jsonb_array_length(allowed_ips) > 0) ELSE false END)
);
--
-- Name: models; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.models (
id character varying(36) NOT NULL,
provider_id character varying(36) NOT NULL,
global_model_id character varying(36),
provider_model_name character varying(200) NOT NULL,
global_model_name character varying(255),
api_format character varying(128),
enabled boolean DEFAULT true NOT NULL,
price_per_request numeric(20,8),
tiered_pricing json,
supports_vision boolean,
supports_function_calling boolean,
supports_streaming boolean,
supports_extended_thinking boolean,
supports_image_generation boolean,
is_active boolean DEFAULT true NOT NULL,
is_available boolean DEFAULT true,
config json,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
provider_model_mappings jsonb,
metadata json
);
--
-- Name: oauth_providers; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.oauth_providers (
provider_type character varying(50) NOT NULL,
display_name character varying(100) NOT NULL,
client_id text NOT NULL,
client_secret_encrypted text,
authorization_url_override character varying(500),
token_url_override character varying(500),
userinfo_url_override character varying(500),
scopes json,
redirect_uri character varying(500) NOT NULL,
frontend_callback_url character varying(500) NOT NULL,
attribute_mapping json,
extra_config json,
is_enabled boolean DEFAULT false NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: payment_callbacks; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.payment_callbacks (
id character varying(36) NOT NULL,
payment_order_id character varying(36),
payment_method character varying(30) NOT NULL,
callback_key character varying(128) NOT NULL,
order_no character varying(64),
gateway_order_id character varying(128),
payload_hash character varying(128),
signature_valid boolean DEFAULT false NOT NULL,
status character varying(20) DEFAULT 'received'::character varying NOT NULL,
payload jsonb,
error_message text,
created_at timestamp with time zone NOT NULL,
processed_at timestamp with time zone
);
--
-- Name: payment_orders; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.payment_orders (
id character varying(36) NOT NULL,
order_no character varying(64) NOT NULL,
wallet_id character varying(36) NOT NULL,
user_id character varying(36),
amount_usd numeric(20,8) NOT NULL,
pay_amount numeric(20,2),
pay_currency character varying(3),
exchange_rate numeric(18,8),
refunded_amount_usd numeric(20,8) DEFAULT '0'::numeric NOT NULL,
refundable_amount_usd numeric(20,8) DEFAULT '0'::numeric NOT NULL,
payment_method character varying(30) NOT NULL,
gateway_order_id character varying(128),
gateway_response jsonb,
status character varying(20) DEFAULT 'pending'::character varying NOT NULL,
created_at timestamp with time zone NOT NULL,
paid_at timestamp with time zone,
credited_at timestamp with time zone,
expires_at timestamp with time zone
);
--
-- Name: provider_api_keys; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.provider_api_keys (
id character varying(36) NOT NULL,
api_key text,
encrypted_key text,
name character varying(100) NOT NULL,
note character varying(500),
internal_priority integer DEFAULT 50,
rpm_limit integer,
allowed_models json,
capabilities json,
learned_rpm_limit integer,
concurrent_429_count integer DEFAULT 0 NOT NULL,
rpm_429_count integer DEFAULT 0 NOT NULL,
last_429_at timestamp with time zone,
last_429_type character varying(50),
last_rpm_peak integer,
adjustment_history json,
utilization_samples json,
last_probe_increase_at timestamp with time zone,
cache_ttl_minutes integer DEFAULT 5 NOT NULL,
max_probe_interval_minutes integer DEFAULT 32 NOT NULL,
request_count integer DEFAULT 0,
success_count integer DEFAULT 0,
error_count integer DEFAULT 0,
total_response_time_ms integer DEFAULT 0,
last_used_at timestamp with time zone,
last_error_at timestamp with time zone,
last_error_msg text,
is_active boolean DEFAULT true NOT NULL,
expires_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
provider_id character varying(36) NOT NULL,
api_formats json,
auth_type_by_format json,
rate_multipliers json,
health_by_format jsonb,
circuit_breaker_by_format jsonb,
auto_fetch_models boolean DEFAULT false NOT NULL,
last_models_fetch_at timestamp with time zone,
last_models_fetch_error text,
locked_models json,
global_priority_by_format json,
model_include_patterns json,
model_exclude_patterns json,
auth_type character varying(20) DEFAULT 'api_key'::character varying NOT NULL,
auth_config text,
upstream_metadata jsonb,
oauth_invalid_at timestamp with time zone,
oauth_invalid_reason character varying(255),
proxy json,
fingerprint json,
total_tokens bigint NOT NULL,
total_cost_usd numeric(20,8) NOT NULL,
status_snapshot json,
status character varying(64) DEFAULT 'active'::character varying NOT NULL,
weight bigint DEFAULT 1 NOT NULL,
metadata json
);
--
-- Name: pool_member_scores; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.pool_member_scores (
id character varying(192) NOT NULL,
pool_kind character varying(64) NOT NULL,
pool_id character varying(64) NOT NULL,
member_kind character varying(64) NOT NULL,
member_id character varying(64) NOT NULL,
capability character varying(64) NOT NULL,
scope_kind character varying(64) NOT NULL,
scope_id character varying(128),
score double precision DEFAULT 0 NOT NULL,
hard_state character varying(64) DEFAULT 'unknown'::character varying NOT NULL,
score_version bigint DEFAULT 1 NOT NULL,
score_reason jsonb NOT NULL,
last_ranked_at bigint,
last_scheduled_at bigint,
last_success_at bigint,
last_failure_at bigint,
failure_count bigint DEFAULT 0 NOT NULL,
last_probe_attempt_at bigint,
last_probe_success_at bigint,
last_probe_failure_at bigint,
probe_failure_count bigint DEFAULT 0 NOT NULL,
probe_status character varying(64) DEFAULT 'never'::character varying NOT NULL,
updated_at bigint NOT NULL
);
--
-- Name: provider_endpoints; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.provider_endpoints (
id character varying(36) NOT NULL,
provider_id character varying(36) NOT NULL,
name character varying(255),
api_format character varying(50),
base_url character varying(500) NOT NULL,
max_retries integer DEFAULT 3,
enabled boolean DEFAULT true NOT NULL,
is_active boolean DEFAULT true NOT NULL,
weight bigint DEFAULT 1 NOT NULL,
custom_path character varying(200),
config json,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
proxy jsonb,
header_rules json,
format_acceptance_config json,
api_family character varying(50),
endpoint_kind character varying(50),
body_rules json,
health_score double precision DEFAULT 1.0 NOT NULL,
metadata json
);
--
-- Name: provider_usage_tracking; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.provider_usage_tracking (
id character varying(36) NOT NULL,
provider_id character varying(36) NOT NULL,
window_start timestamp with time zone NOT NULL,
window_end timestamp with time zone NOT NULL,
total_requests integer DEFAULT 0,
successful_requests integer DEFAULT 0,
failed_requests integer DEFAULT 0,
avg_response_time_ms double precision DEFAULT '0'::double precision,
total_response_time_ms double precision DEFAULT '0'::double precision,
total_cost_usd double precision DEFAULT '0'::double precision,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: providers; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.providers (
id character varying(36) NOT NULL,
name character varying(100) NOT NULL,
description text,
website character varying(500),
billing_type public.providerbillingtype DEFAULT 'pay_as_you_go'::public.providerbillingtype NOT NULL,
monthly_quota_usd numeric(20,8),
monthly_used_usd numeric(20,8) DEFAULT '0'::double precision,
quota_reset_day integer DEFAULT 30,
quota_last_reset_at timestamp with time zone,
quota_expires_at timestamp with time zone,
enabled boolean DEFAULT true NOT NULL,
priority bigint DEFAULT 0 NOT NULL,
provider_priority integer DEFAULT 100,
is_active boolean DEFAULT true NOT NULL,
concurrent_limit integer,
config json,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
max_retries integer,
proxy jsonb,
stream_first_byte_timeout double precision,
request_timeout double precision,
keep_priority_on_conversion boolean DEFAULT false NOT NULL,
enable_format_conversion boolean DEFAULT true NOT NULL,
provider_type character varying(20) DEFAULT 'custom'::character varying NOT NULL
);
--
-- Name: proxy_node_events; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.proxy_node_events (
id bigint NOT NULL,
node_id character varying(36) NOT NULL,
event_type character varying(20) NOT NULL,
detail character varying(500),
created_at timestamp with time zone NOT NULL
);
--
-- Name: proxy_node_events_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS public.proxy_node_events_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: proxy_node_events_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.proxy_node_events_id_seq OWNED BY public.proxy_node_events.id;
--
-- Name: proxy_nodes; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.proxy_nodes (
id character varying(36) NOT NULL,
name character varying(100) NOT NULL,
ip character varying(512) NOT NULL,
port integer NOT NULL,
region character varying(100),
status public.proxynodestatus DEFAULT 'online'::public.proxynodestatus NOT NULL,
registered_by character varying(36),
last_heartbeat_at timestamp with time zone,
heartbeat_interval integer DEFAULT 30 NOT NULL,
active_connections integer DEFAULT 0 NOT NULL,
total_requests bigint DEFAULT 0 NOT NULL,
avg_latency_ms double precision,
is_manual boolean DEFAULT false NOT NULL,
proxy_url character varying(500),
proxy_username character varying(255),
proxy_password text,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
remote_config json,
config_version integer DEFAULT 0 NOT NULL,
hardware_info json,
estimated_max_concurrency integer,
tunnel_mode boolean DEFAULT false NOT NULL,
tunnel_connected boolean DEFAULT false NOT NULL,
tunnel_connected_at timestamp with time zone,
failed_requests bigint DEFAULT '0'::bigint NOT NULL,
dns_failures bigint DEFAULT '0'::bigint NOT NULL,
stream_errors bigint DEFAULT '0'::bigint NOT NULL,
proxy_metadata json
);
--
-- Name: refund_requests; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.refund_requests (
id character varying(36) NOT NULL,
refund_no character varying(64) NOT NULL,
wallet_id character varying(36) NOT NULL,
user_id character varying(36),
payment_order_id character varying(36),
source_type character varying(30) NOT NULL,
source_id character varying(100),
refund_mode character varying(30) NOT NULL,
amount_usd numeric(20,8) NOT NULL,
status character varying(30) DEFAULT 'pending_approval'::character varying NOT NULL,
reason text,
requested_by character varying(36),
approved_by character varying(36),
processed_by character varying(36),
gateway_refund_id character varying(128),
payout_method character varying(50),
payout_reference character varying(255),
payout_proof jsonb,
failure_reason text,
idempotency_key character varying(128),
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
processed_at timestamp with time zone,
completed_at timestamp with time zone
);
--
-- Name: request_candidates; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.request_candidates (
id character varying(36) NOT NULL,
request_id character varying(100) NOT NULL,
user_id character varying(36),
api_key_id character varying(36),
candidate_index integer NOT NULL,
retry_index integer DEFAULT 0 NOT NULL,
provider_id character varying(36),
endpoint_id character varying(36),
key_id character varying(36),
status character varying(20) NOT NULL,
skip_reason text,
is_cached boolean DEFAULT false,
status_code integer,
error_type character varying(50),
error_message text,
latency_ms integer,
concurrent_requests integer,
extra_data json,
required_capabilities json,
created_at timestamp with time zone DEFAULT now() NOT NULL,
started_at timestamp with time zone,
finished_at timestamp with time zone,
username character varying(100),
api_key_name character varying(200)
);
--
-- Name: stats_daily; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_daily (
id character varying(36) NOT NULL,
date timestamp with time zone NOT NULL,
total_requests integer DEFAULT 0 NOT NULL,
success_requests integer DEFAULT 0 NOT NULL,
error_requests integer DEFAULT 0 NOT NULL,
input_tokens bigint DEFAULT '0'::bigint NOT NULL,
output_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_creation_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_read_tokens bigint DEFAULT '0'::bigint NOT NULL,
total_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
actual_total_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
input_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
output_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
cache_creation_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
cache_read_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
avg_response_time_ms double precision DEFAULT '0'::double precision NOT NULL,
fallback_count integer DEFAULT 0 NOT NULL,
unique_models integer DEFAULT 0 NOT NULL,
unique_providers integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
is_complete boolean DEFAULT false NOT NULL,
aggregated_at timestamp with time zone,
p50_response_time_ms integer,
p90_response_time_ms integer,
p99_response_time_ms integer,
p50_first_byte_time_ms integer,
p90_first_byte_time_ms integer,
p99_first_byte_time_ms integer
);
--
-- Name: stats_daily_api_key; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_daily_api_key (
id character varying(36) NOT NULL,
api_key_id character varying(36),
date timestamp with time zone NOT NULL,
total_requests integer DEFAULT 0 NOT NULL,
success_requests integer DEFAULT 0 NOT NULL,
error_requests integer DEFAULT 0 NOT NULL,
input_tokens bigint DEFAULT '0'::bigint NOT NULL,
output_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_creation_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_read_tokens bigint DEFAULT '0'::bigint NOT NULL,
total_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
api_key_name character varying(200)
);
--
-- Name: stats_daily_error; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_daily_error (
id character varying(36) NOT NULL,
date timestamp with time zone NOT NULL,
error_category character varying(50) NOT NULL,
provider_name character varying(100),
model character varying(100),
count integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);
--
-- Name: stats_daily_model; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_daily_model (
id character varying(36) NOT NULL,
date timestamp with time zone NOT NULL,
model character varying(100) NOT NULL,
total_requests integer NOT NULL,
input_tokens bigint NOT NULL,
output_tokens bigint NOT NULL,
cache_creation_tokens bigint NOT NULL,
cache_read_tokens bigint NOT NULL,
total_cost numeric(20,8) NOT NULL,
avg_response_time_ms double precision NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: stats_daily_provider; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_daily_provider (
id character varying(36) NOT NULL,
date timestamp with time zone NOT NULL,
provider_name character varying(100) NOT NULL,
total_requests integer NOT NULL,
input_tokens bigint NOT NULL,
output_tokens bigint NOT NULL,
cache_creation_tokens bigint NOT NULL,
cache_read_tokens bigint NOT NULL,
total_cost numeric(20,8) NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL
);
--
-- Name: stats_hourly; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_hourly (
id character varying(36) NOT NULL,
hour_utc timestamp with time zone NOT NULL,
total_requests integer NOT NULL,
success_requests integer NOT NULL,
error_requests integer NOT NULL,
input_tokens bigint NOT NULL,
output_tokens bigint NOT NULL,
cache_creation_tokens bigint NOT NULL,
cache_read_tokens bigint NOT NULL,
total_cost numeric(20,8) NOT NULL,
actual_total_cost numeric(20,8) NOT NULL,
avg_response_time_ms double precision NOT NULL,
is_complete boolean NOT NULL,
aggregated_at timestamp with time zone,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL
);
--
-- Name: stats_hourly_model; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_hourly_model (
id character varying(36) NOT NULL,
hour_utc timestamp with time zone NOT NULL,
model character varying(100) NOT NULL,
total_requests integer NOT NULL,
input_tokens bigint NOT NULL,
output_tokens bigint NOT NULL,
total_cost numeric(20,8) NOT NULL,
avg_response_time_ms double precision NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL
);
--
-- Name: stats_hourly_provider; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_hourly_provider (
id character varying(36) NOT NULL,
hour_utc timestamp with time zone NOT NULL,
provider_name character varying(100) NOT NULL,
total_requests integer NOT NULL,
input_tokens bigint NOT NULL,
output_tokens bigint NOT NULL,
total_cost numeric(20,8) NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL
);
--
-- Name: stats_hourly_user; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_hourly_user (
id character varying(36) NOT NULL,
hour_utc timestamp with time zone NOT NULL,
user_id character varying(36) NOT NULL,
total_requests integer NOT NULL,
success_requests integer NOT NULL,
error_requests integer NOT NULL,
input_tokens bigint NOT NULL,
output_tokens bigint NOT NULL,
total_cost numeric(20,8) NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL
);
--
-- Name: stats_summary; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_summary (
id character varying(36) NOT NULL,
cutoff_date timestamp with time zone NOT NULL,
all_time_requests integer DEFAULT 0 NOT NULL,
all_time_success_requests integer DEFAULT 0 NOT NULL,
all_time_error_requests integer DEFAULT 0 NOT NULL,
all_time_input_tokens bigint DEFAULT '0'::bigint NOT NULL,
all_time_output_tokens bigint DEFAULT '0'::bigint NOT NULL,
all_time_cache_creation_tokens bigint DEFAULT '0'::bigint NOT NULL,
all_time_cache_read_tokens bigint DEFAULT '0'::bigint NOT NULL,
all_time_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
all_time_actual_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
total_users integer DEFAULT 0 NOT NULL,
active_users integer DEFAULT 0 NOT NULL,
total_api_keys integer DEFAULT 0 NOT NULL,
active_api_keys integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: stats_user_daily; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.stats_user_daily (
id character varying(36) NOT NULL,
user_id character varying(36),
date timestamp with time zone NOT NULL,
total_requests integer DEFAULT 0 NOT NULL,
success_requests integer DEFAULT 0 NOT NULL,
error_requests integer DEFAULT 0 NOT NULL,
input_tokens bigint DEFAULT '0'::bigint NOT NULL,
output_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_creation_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_read_tokens bigint DEFAULT '0'::bigint NOT NULL,
total_cost numeric(20,8) DEFAULT '0'::double precision NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
username character varying(100)
);
--
-- Name: system_configs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.system_configs (
id character varying(36) NOT NULL,
key character varying(100) NOT NULL,
value json NOT NULL,
description text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: auth_modules; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.auth_modules (
id character varying(36) NOT NULL,
module_type character varying(128) NOT NULL,
enabled boolean DEFAULT true NOT NULL,
config json NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT auth_modules_pkey PRIMARY KEY (id),
CONSTRAINT auth_modules_module_type_key UNIQUE (module_type)
);
--
-- Name: usage; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.usage (
id character varying(36) NOT NULL,
user_id character varying(36),
api_key_id character varying(36),
request_id character varying(100) NOT NULL,
provider_name character varying(100) NOT NULL,
model character varying(100) NOT NULL,
target_model character varying(100),
provider_id character varying(36),
provider_endpoint_id character varying(36),
provider_api_key_id character varying(36),
input_tokens integer DEFAULT 0,
output_tokens integer DEFAULT 0,
input_output_total_tokens integer DEFAULT 0,
cache_creation_input_tokens integer DEFAULT 0,
cache_read_input_tokens integer DEFAULT 0,
input_cost_usd numeric(20,8) DEFAULT '0'::double precision,
output_cost_usd numeric(20,8) DEFAULT '0'::double precision,
cache_cost_usd numeric(20,8) DEFAULT '0'::double precision,
cache_creation_cost_usd numeric(20,8) DEFAULT '0'::double precision,
cache_read_cost_usd numeric(20,8) DEFAULT '0'::double precision,
request_cost_usd numeric(20,8) DEFAULT '0'::double precision,
total_cost_usd numeric(20,8) DEFAULT '0'::double precision,
actual_input_cost_usd numeric(20,8) DEFAULT '0'::double precision,
actual_output_cost_usd numeric(20,8) DEFAULT '0'::double precision,
actual_cache_creation_cost_usd numeric(20,8) DEFAULT '0'::double precision,
actual_cache_read_cost_usd numeric(20,8) DEFAULT '0'::double precision,
actual_request_cost_usd numeric(20,8) DEFAULT '0'::double precision,
actual_total_cost_usd numeric(20,8) DEFAULT '0'::double precision,
rate_multiplier numeric(10,6) DEFAULT '1'::double precision,
input_price_per_1m numeric(20,8),
output_price_per_1m numeric(20,8),
cache_creation_price_per_1m numeric(20,8),
cache_read_price_per_1m numeric(20,8),
price_per_request numeric(20,8),
request_type character varying(50),
api_format character varying(50),
is_stream boolean DEFAULT false,
status_code integer,
error_message text,
response_time_ms integer,
status character varying(20) DEFAULT 'completed'::character varying NOT NULL,
request_headers json,
request_body json,
provider_request_headers json,
response_headers json,
response_body json,
request_body_compressed bytea,
response_body_compressed bytea,
request_metadata json,
created_at timestamp with time zone DEFAULT now() NOT NULL,
first_byte_time_ms integer,
client_response_headers json,
endpoint_api_format character varying(50),
has_format_conversion boolean DEFAULT false,
billing_status character varying(20) DEFAULT 'pending'::character varying NOT NULL,
finalized_at timestamp with time zone,
error_category character varying(50),
provider_request_body json,
provider_request_body_compressed bytea,
client_response_body json,
client_response_body_compressed bytea,
api_family character varying(50),
endpoint_kind character varying(50),
provider_api_family character varying(50),
provider_endpoint_kind character varying(50),
cache_creation_input_tokens_5m integer DEFAULT 0 NOT NULL,
cache_creation_input_tokens_1h integer DEFAULT 0 NOT NULL,
cache_creation_ephemeral_5m_input_tokens integer DEFAULT 0 NOT NULL,
cache_creation_ephemeral_1h_input_tokens integer DEFAULT 0 NOT NULL,
wallet_id character varying(36),
wallet_balance_before numeric(20,8),
wallet_balance_after numeric(20,8),
wallet_recharge_balance_before numeric(20,8),
wallet_recharge_balance_after numeric(20,8),
wallet_gift_balance_before numeric(20,8),
wallet_gift_balance_after numeric(20,8),
username character varying(100),
api_key_name character varying(200),
input_context_tokens integer DEFAULT 0 NOT NULL,
total_tokens integer DEFAULT 0 NOT NULL,
cache_creation_cost_usd_5m numeric(20,8) DEFAULT '0'::numeric NOT NULL,
cache_creation_cost_usd_1h numeric(20,8) DEFAULT '0'::numeric NOT NULL,
actual_cache_creation_cost_usd_5m numeric(20,8) DEFAULT '0'::numeric NOT NULL,
actual_cache_creation_cost_usd_1h numeric(20,8) DEFAULT '0'::numeric NOT NULL,
actual_cache_cost_usd numeric(20,8) DEFAULT '0'::numeric NOT NULL,
cache_creation_price_per_1m_5m numeric(20,8),
cache_creation_price_per_1m_1h numeric(20,8),
created_at_unix_ms bigint DEFAULT 0 NOT NULL,
updated_at_unix_secs bigint DEFAULT 0 NOT NULL
);
--
-- Name: user_model_usage_counts; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.user_model_usage_counts (
id character varying(36) NOT NULL,
user_id character varying(36) NOT NULL,
model character varying(100) NOT NULL,
usage_count integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: user_oauth_links; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.user_oauth_links (
id character varying(36) NOT NULL,
user_id character varying(36) NOT NULL,
provider_type character varying(50) NOT NULL,
provider_user_id character varying(255) NOT NULL,
provider_username character varying(255),
provider_email character varying(255),
extra_data json,
linked_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
last_login_at timestamp with time zone
);
--
-- Name: user_preferences; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.user_preferences (
id character varying(36) NOT NULL,
user_id character varying(36) NOT NULL,
avatar_url character varying(500),
bio text,
default_provider_id character varying(36),
theme character varying(20) DEFAULT 'light'::character varying,
language character varying(10) DEFAULT 'zh-CN'::character varying,
timezone character varying(50) DEFAULT 'Asia/Shanghai'::character varying,
email_notifications boolean DEFAULT true,
usage_alerts boolean DEFAULT true,
announcement_notifications boolean DEFAULT true,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: user_sessions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.user_sessions (
id character varying(36) NOT NULL,
user_id character varying(36) NOT NULL,
client_device_id character varying(128) NOT NULL,
device_label character varying(120),
device_type character varying(20) DEFAULT 'unknown'::character varying NOT NULL,
browser_name character varying(50),
browser_version character varying(50),
os_name character varying(50),
os_version character varying(50),
device_model character varying(100),
ip_address character varying(45),
user_agent character varying(1000),
client_hints json,
refresh_token_hash character varying(64) NOT NULL,
prev_refresh_token_hash character varying(64),
rotated_at timestamp with time zone,
last_seen_at timestamp with time zone DEFAULT now() NOT NULL,
expires_at timestamp with time zone NOT NULL,
revoked_at timestamp with time zone,
revoke_reason character varying(100),
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: users; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.users (
id character varying(36) NOT NULL,
external_id character varying(255),
email character varying(255),
username character varying(100) NOT NULL,
password_hash character varying(255),
role public.userrole DEFAULT 'user'::public.userrole NOT NULL,
allowed_providers json,
allowed_api_formats json,
allowed_models json,
model_capability_settings json,
is_active boolean DEFAULT true NOT NULL,
is_deleted boolean DEFAULT false NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
last_login_at timestamp with time zone,
auth_source public.authsource DEFAULT 'local'::public.authsource NOT NULL,
ldap_dn character varying(512),
ldap_username character varying(255),
email_verified boolean NOT NULL,
rate_limit integer,
metadata json
);
--
-- Name: video_tasks; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.video_tasks (
id character varying(36) NOT NULL,
external_task_id character varying(200),
user_id character varying(36),
api_key_id character varying(36),
provider_id character varying(36),
endpoint_id character varying(36),
key_id character varying(36),
client_api_format character varying(50) NOT NULL,
provider_api_format character varying(50) NOT NULL,
format_converted boolean DEFAULT false,
model character varying(100) NOT NULL,
prompt text NOT NULL,
original_request_body json,
converted_request_body json,
duration_seconds integer DEFAULT 4,
resolution character varying(20) DEFAULT '720p'::character varying,
aspect_ratio character varying(10) DEFAULT '16:9'::character varying,
size character varying(20),
status character varying(20) DEFAULT 'pending'::character varying,
progress_percent integer DEFAULT 0,
progress_message character varying(500),
video_url character varying(2000),
video_urls json,
thumbnail_url character varying(2000),
video_size_bytes bigint,
video_expires_at timestamp with time zone,
stored_video_path character varying(500),
storage_provider character varying(50),
error_code character varying(50),
error_message text,
retry_count integer DEFAULT 0,
max_retries integer DEFAULT 3,
poll_interval_seconds integer DEFAULT 10,
next_poll_at timestamp with time zone,
poll_count integer DEFAULT 0,
max_poll_count integer DEFAULT 360,
remixed_from_task_id character varying(36),
webhook_url character varying(500),
webhook_sent boolean DEFAULT false,
webhook_sent_at timestamp with time zone,
created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
submitted_at timestamp with time zone,
completed_at timestamp with time zone,
updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP,
request_metadata json,
request_id character varying(100) NOT NULL,
short_id character varying(16) NOT NULL,
video_duration_seconds double precision,
username character varying(100),
api_key_name character varying(200)
);
--
-- Name: wallet_daily_usage_ledgers; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.wallet_daily_usage_ledgers (
id character varying(36) NOT NULL,
wallet_id character varying(36) NOT NULL,
billing_date date NOT NULL,
billing_timezone character varying(64) NOT NULL,
total_cost_usd numeric(20,8) DEFAULT '0'::numeric NOT NULL,
total_requests integer DEFAULT 0 NOT NULL,
input_tokens bigint DEFAULT '0'::bigint NOT NULL,
output_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_creation_tokens bigint DEFAULT '0'::bigint NOT NULL,
cache_read_tokens bigint DEFAULT '0'::bigint NOT NULL,
first_finalized_at timestamp with time zone,
last_finalized_at timestamp with time zone,
aggregated_at timestamp with time zone NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL
);
--
-- Name: wallet_transactions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.wallet_transactions (
id character varying(36) NOT NULL,
wallet_id character varying(36) NOT NULL,
category character varying(20) NOT NULL,
reason_code character varying(40) NOT NULL,
amount numeric(20,8) NOT NULL,
balance_before numeric(20,8) NOT NULL,
balance_after numeric(20,8) NOT NULL,
recharge_balance_before numeric(20,8) NOT NULL,
recharge_balance_after numeric(20,8) NOT NULL,
gift_balance_before numeric(20,8) NOT NULL,
gift_balance_after numeric(20,8) NOT NULL,
link_type character varying(30),
link_id character varying(100),
operator_id character varying(36),
description text,
created_at timestamp with time zone NOT NULL,
CONSTRAINT ck_wallet_tx_balance_after_consistent CHECK ((balance_after = (recharge_balance_after + gift_balance_after))),
CONSTRAINT ck_wallet_tx_balance_before_consistent CHECK ((balance_before = (recharge_balance_before + gift_balance_before)))
);
--
-- Name: wallets; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.wallets (
id character varying(36) NOT NULL,
user_id character varying(36),
api_key_id character varying(36),
balance numeric(20,8) DEFAULT '0'::numeric NOT NULL,
gift_balance numeric(20,8) DEFAULT '0'::numeric NOT NULL,
limit_mode character varying(20) DEFAULT 'finite'::character varying NOT NULL,
currency character varying(3) DEFAULT 'USD'::character varying NOT NULL,
status character varying(20) DEFAULT 'active'::character varying NOT NULL,
total_recharged numeric(20,8) DEFAULT '0'::numeric NOT NULL,
total_consumed numeric(20,8) DEFAULT '0'::numeric NOT NULL,
total_refunded numeric(20,8) DEFAULT '0'::numeric NOT NULL,
total_adjusted numeric(20,8) DEFAULT '0'::numeric NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
CONSTRAINT ck_wallet_single_owner CHECK ((((user_id IS NOT NULL) AND (api_key_id IS NULL)) OR ((user_id IS NULL) AND (api_key_id IS NOT NULL)) OR ((user_id IS NULL) AND (api_key_id IS NULL)))),
CONSTRAINT ck_wallets_gift_balance_non_negative CHECK ((gift_balance >= (0)::numeric))
);
--
-- Name: ldap_configs id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.ldap_configs ALTER COLUMN id SET DEFAULT nextval('public.ldap_configs_id_seq'::regclass);
--
-- Name: proxy_node_events id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.proxy_node_events ALTER COLUMN id SET DEFAULT nextval('public.proxy_node_events_id_seq'::regclass);
--
-- Name: announcement_reads announcement_reads_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.announcement_reads
ADD CONSTRAINT announcement_reads_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: announcements announcements_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.announcements
ADD CONSTRAINT announcements_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: api_key_provider_mappings api_key_provider_mappings_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.api_key_provider_mappings
ADD CONSTRAINT api_key_provider_mappings_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: api_keys api_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.api_keys
ADD CONSTRAINT api_keys_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: audit_logs audit_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.audit_logs
ADD CONSTRAINT audit_logs_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: billing_rules billing_rules_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.billing_rules
ADD CONSTRAINT billing_rules_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: dimension_collectors dimension_collectors_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.dimension_collectors
ADD CONSTRAINT dimension_collectors_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: gemini_file_mappings gemini_file_mappings_file_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.gemini_file_mappings
ADD CONSTRAINT gemini_file_mappings_file_name_key UNIQUE (file_name);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: gemini_file_mappings gemini_file_mappings_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.gemini_file_mappings
ADD CONSTRAINT gemini_file_mappings_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: global_models global_models_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.global_models
ADD CONSTRAINT global_models_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: ldap_configs ldap_configs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.ldap_configs
ADD CONSTRAINT ldap_configs_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: management_tokens management_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.management_tokens
ADD CONSTRAINT management_tokens_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: models models_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.models
ADD CONSTRAINT models_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: oauth_providers oauth_providers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.oauth_providers
ADD CONSTRAINT oauth_providers_pkey PRIMARY KEY (provider_type);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: payment_callbacks payment_callbacks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.payment_callbacks
ADD CONSTRAINT payment_callbacks_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: payment_orders payment_orders_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.payment_orders
ADD CONSTRAINT payment_orders_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: provider_api_keys provider_api_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.provider_api_keys
ADD CONSTRAINT provider_api_keys_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: pool_member_scores pool_member_scores_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.pool_member_scores
ADD CONSTRAINT pool_member_scores_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: provider_endpoints provider_endpoints_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.provider_endpoints
ADD CONSTRAINT provider_endpoints_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: provider_usage_tracking provider_usage_tracking_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.provider_usage_tracking
ADD CONSTRAINT provider_usage_tracking_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: providers providers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.providers
ADD CONSTRAINT providers_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: proxy_node_events proxy_node_events_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.proxy_node_events
ADD CONSTRAINT proxy_node_events_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: proxy_nodes proxy_nodes_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.proxy_nodes
ADD CONSTRAINT proxy_nodes_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests refund_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT refund_requests_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: request_candidates request_candidates_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.request_candidates
ADD CONSTRAINT request_candidates_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_api_key stats_daily_api_key_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_api_key
ADD CONSTRAINT stats_daily_api_key_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_error stats_daily_error_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_error
ADD CONSTRAINT stats_daily_error_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_model stats_daily_model_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_model
ADD CONSTRAINT stats_daily_model_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily stats_daily_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily
ADD CONSTRAINT stats_daily_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_provider stats_daily_provider_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_provider
ADD CONSTRAINT stats_daily_provider_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly_model stats_hourly_model_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly_model
ADD CONSTRAINT stats_hourly_model_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly stats_hourly_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly
ADD CONSTRAINT stats_hourly_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly_provider stats_hourly_provider_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly_provider
ADD CONSTRAINT stats_hourly_provider_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly_user stats_hourly_user_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly_user
ADD CONSTRAINT stats_hourly_user_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_summary stats_summary_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_summary
ADD CONSTRAINT stats_summary_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_user_daily stats_user_daily_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_user_daily
ADD CONSTRAINT stats_user_daily_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: system_configs system_configs_key_key; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.system_configs
ADD CONSTRAINT system_configs_key_key UNIQUE (key);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: system_configs system_configs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.system_configs
ADD CONSTRAINT system_configs_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: api_key_provider_mappings uq_apikey_provider; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.api_key_provider_mappings
ADD CONSTRAINT uq_apikey_provider UNIQUE (api_key_id, provider_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: management_tokens uq_management_tokens_user_name; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.management_tokens
ADD CONSTRAINT uq_management_tokens_user_name UNIQUE (user_id, name);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_oauth_links uq_oauth_provider_user; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_oauth_links
ADD CONSTRAINT uq_oauth_provider_user UNIQUE (provider_type, provider_user_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: payment_callbacks uq_payment_callbacks_callback_key; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.payment_callbacks
ADD CONSTRAINT uq_payment_callbacks_callback_key UNIQUE (callback_key);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: payment_orders uq_payment_orders_order_no; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.payment_orders
ADD CONSTRAINT uq_payment_orders_order_no UNIQUE (order_no);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: provider_endpoints uq_provider_api_format; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.provider_endpoints
ADD CONSTRAINT uq_provider_api_format UNIQUE (provider_id, api_format);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: models uq_provider_model; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.models
ADD CONSTRAINT uq_provider_model UNIQUE (provider_id, provider_model_name);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: proxy_nodes uq_proxy_node_ip_port; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.proxy_nodes
ADD CONSTRAINT uq_proxy_node_ip_port UNIQUE (ip, port);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests uq_refund_requests_idempotency_key; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT uq_refund_requests_idempotency_key UNIQUE (idempotency_key);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests uq_refund_requests_refund_no; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT uq_refund_requests_refund_no UNIQUE (refund_no);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: request_candidates uq_request_candidate_with_retry; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.request_candidates
ADD CONSTRAINT uq_request_candidate_with_retry UNIQUE (request_id, candidate_index, retry_index);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_api_key uq_stats_daily_api_key; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_api_key
ADD CONSTRAINT uq_stats_daily_api_key UNIQUE (api_key_id, date);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_error uq_stats_daily_error; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_error
ADD CONSTRAINT uq_stats_daily_error UNIQUE (date, error_category, provider_name, model);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_model uq_stats_daily_model; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_model
ADD CONSTRAINT uq_stats_daily_model UNIQUE (date, model);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_provider uq_stats_daily_provider; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_provider
ADD CONSTRAINT uq_stats_daily_provider UNIQUE (date, provider_name);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly uq_stats_hourly_hour; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly
ADD CONSTRAINT uq_stats_hourly_hour UNIQUE (hour_utc);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly_model uq_stats_hourly_model; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly_model
ADD CONSTRAINT uq_stats_hourly_model UNIQUE (hour_utc, model);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly_provider uq_stats_hourly_provider; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly_provider
ADD CONSTRAINT uq_stats_hourly_provider UNIQUE (hour_utc, provider_name);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_hourly_user uq_stats_hourly_user; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_hourly_user
ADD CONSTRAINT uq_stats_hourly_user UNIQUE (hour_utc, user_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_user_daily uq_stats_user_daily; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_user_daily
ADD CONSTRAINT uq_stats_user_daily UNIQUE (user_id, date);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: announcement_reads uq_user_announcement; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.announcement_reads
ADD CONSTRAINT uq_user_announcement UNIQUE (user_id, announcement_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_model_usage_counts uq_user_model_usage_count; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_model_usage_counts
ADD CONSTRAINT uq_user_model_usage_count UNIQUE (user_id, model);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_oauth_links uq_user_oauth_provider; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_oauth_links
ADD CONSTRAINT uq_user_oauth_provider UNIQUE (user_id, provider_type);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks uq_video_tasks_request_id; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT uq_video_tasks_request_id UNIQUE (request_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallet_daily_usage_ledgers uq_wallet_daily_usage_ledgers_wallet_date_tz; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallet_daily_usage_ledgers
ADD CONSTRAINT uq_wallet_daily_usage_ledgers_wallet_date_tz UNIQUE (wallet_id, billing_date, billing_timezone);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallets uq_wallets_api_key_id; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallets
ADD CONSTRAINT uq_wallets_api_key_id UNIQUE (api_key_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallets uq_wallets_user_id; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallets
ADD CONSTRAINT uq_wallets_user_id UNIQUE (user_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: usage usage_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.usage
ADD CONSTRAINT usage_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_model_usage_counts user_model_usage_counts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_model_usage_counts
ADD CONSTRAINT user_model_usage_counts_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_oauth_links user_oauth_links_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_oauth_links
ADD CONSTRAINT user_oauth_links_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_preferences user_preferences_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_preferences
ADD CONSTRAINT user_preferences_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_preferences user_preferences_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_preferences
ADD CONSTRAINT user_preferences_user_id_key UNIQUE (user_id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_sessions user_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_sessions
ADD CONSTRAINT user_sessions_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks video_tasks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT video_tasks_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallet_daily_usage_ledgers wallet_daily_usage_ledgers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallet_daily_usage_ledgers
ADD CONSTRAINT wallet_daily_usage_ledgers_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallet_transactions wallet_transactions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallet_transactions
ADD CONSTRAINT wallet_transactions_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallets wallets_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallets
ADD CONSTRAINT wallets_pkey PRIMARY KEY (id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: idx_apikey_provider_enabled; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_apikey_provider_enabled ON public.api_key_provider_mappings USING btree (api_key_id, is_enabled);
--
-- Name: idx_endpoint_format_active; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_endpoint_format_active ON public.provider_endpoints USING btree (api_format, is_active);
--
-- Name: idx_gemini_file_mappings_expires; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_gemini_file_mappings_expires ON public.gemini_file_mappings USING btree (expires_at);
--
-- Name: idx_gemini_file_mappings_source_hash; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_gemini_file_mappings_source_hash ON public.gemini_file_mappings USING btree (source_hash);
--
-- Name: idx_management_tokens_is_active; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_management_tokens_is_active ON public.management_tokens USING btree (is_active);
--
-- Name: idx_management_tokens_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_management_tokens_user_id ON public.management_tokens USING btree (user_id);
--
-- Name: idx_model_provider_model_aliases_gin; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_model_provider_model_aliases_gin ON public.models USING gin (provider_model_mappings jsonb_path_ops) WHERE (is_active = true);
--
-- Name: idx_model_provider_model_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_model_provider_model_name ON public.models USING btree (provider_model_name) WHERE (is_active = true);
--
-- Name: idx_payment_callbacks_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_payment_callbacks_created ON public.payment_callbacks USING btree (created_at);
--
-- Name: idx_payment_callbacks_gateway_order; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_payment_callbacks_gateway_order ON public.payment_callbacks USING btree (gateway_order_id);
--
-- Name: idx_payment_callbacks_order; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_payment_callbacks_order ON public.payment_callbacks USING btree (order_no);
--
-- Name: idx_payment_orders_gateway_order_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_payment_orders_gateway_order_id ON public.payment_orders USING btree (gateway_order_id);
--
-- Name: idx_payment_orders_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_payment_orders_status ON public.payment_orders USING btree (status);
--
-- Name: idx_payment_orders_user_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_payment_orders_user_created ON public.payment_orders USING btree (user_id, created_at);
--
-- Name: idx_payment_orders_wallet_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_payment_orders_wallet_created ON public.payment_orders USING btree (wallet_id, created_at);
--
-- Name: idx_provider_api_keys_provider_active; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_active ON public.provider_api_keys USING btree (provider_id, is_active);
--
-- Name: idx_provider_api_keys_provider_default_sort; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_default_sort ON public.provider_api_keys USING btree (provider_id, internal_priority, name, id);
--
-- Name: idx_provider_api_keys_provider_created_at_desc; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_created_at_desc ON public.provider_api_keys USING btree (provider_id, created_at DESC NULLS LAST, name, id);
--
-- Name: idx_provider_api_keys_provider_last_used_at_desc; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_last_used_at_desc ON public.provider_api_keys USING btree (provider_id, last_used_at DESC NULLS LAST, name, id);
--
-- Name: idx_provider_api_keys_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_id ON public.provider_api_keys USING btree (provider_id);
--
-- Name: idx_provider_family_kind; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_provider_family_kind ON public.provider_endpoints USING btree (provider_id, api_family, endpoint_kind);
--
-- Name: idx_provider_window; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_provider_window ON public.provider_usage_tracking USING btree (provider_id, window_start);
--
-- Name: idx_proxy_node_events_node_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_proxy_node_events_node_created ON public.proxy_node_events USING btree (node_id, created_at);
--
-- Name: idx_rc_provider_status_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_rc_provider_status_created ON public.request_candidates USING btree (provider_id, status, created_at);
--
-- Name: idx_rc_request_id_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_rc_request_id_status ON public.request_candidates USING btree (request_id, status);
--
-- Name: idx_refund_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_refund_status ON public.refund_requests USING btree (status);
--
-- Name: idx_refund_user_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_refund_user_created ON public.refund_requests USING btree (user_id, created_at);
--
-- Name: idx_refund_wallet_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_refund_wallet_created ON public.refund_requests USING btree (wallet_id, created_at);
--
-- Name: idx_request_candidates_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_request_candidates_created_at ON public.request_candidates USING btree (created_at);
--
-- Name: idx_request_candidates_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_request_candidates_provider_id ON public.request_candidates USING btree (provider_id);
--
-- Name: idx_request_candidates_request_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_request_candidates_request_id ON public.request_candidates USING btree (request_id);
--
-- Name: idx_request_candidates_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_request_candidates_status ON public.request_candidates USING btree (status);
--
-- Name: idx_stats_daily_api_key_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_api_key_date ON public.stats_daily_api_key USING btree (date);
--
-- Name: idx_stats_daily_api_key_date_cost; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_api_key_date_cost ON public.stats_daily_api_key USING btree (date, total_cost);
--
-- Name: idx_stats_daily_api_key_date_requests; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_api_key_date_requests ON public.stats_daily_api_key USING btree (date, total_requests);
--
-- Name: idx_stats_daily_api_key_key_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_api_key_key_date ON public.stats_daily_api_key USING btree (api_key_id, date);
--
-- Name: idx_stats_daily_error_category; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_error_category ON public.stats_daily_error USING btree (date, error_category);
--
-- Name: idx_stats_daily_error_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_error_date ON public.stats_daily_error USING btree (date);
--
-- Name: idx_stats_daily_model_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_model_date ON public.stats_daily_model USING btree (date);
--
-- Name: idx_stats_daily_model_date_model; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_model_date_model ON public.stats_daily_model USING btree (date, model);
--
-- Name: idx_stats_daily_provider_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_provider_date ON public.stats_daily_provider USING btree (date);
--
-- Name: idx_stats_daily_provider_date_provider; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_daily_provider_date_provider ON public.stats_daily_provider USING btree (date, provider_name);
--
-- Name: idx_stats_hourly_hour; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_hourly_hour ON public.stats_hourly USING btree (hour_utc);
--
-- Name: idx_stats_hourly_model_hour; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_hourly_model_hour ON public.stats_hourly_model USING btree (hour_utc);
--
-- Name: idx_stats_hourly_model_model_hour; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_hourly_model_model_hour ON public.stats_hourly_model USING btree (model, hour_utc);
--
-- Name: idx_stats_hourly_provider_hour; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_hourly_provider_hour ON public.stats_hourly_provider USING btree (hour_utc);
--
-- Name: idx_stats_hourly_user_hour; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_hourly_user_hour ON public.stats_hourly_user USING btree (hour_utc);
--
-- Name: idx_stats_hourly_user_user_hour; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_hourly_user_user_hour ON public.stats_hourly_user USING btree (user_id, hour_utc);
--
-- Name: idx_stats_user_daily_user_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_stats_user_daily_user_date ON public.stats_user_daily USING btree (user_id, date);
--
-- Name: idx_usage_api_family; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_api_family ON public.usage USING btree (api_family);
--
-- Name: idx_usage_apikey_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_apikey_created ON public.usage USING btree (api_key_id, created_at);
--
-- Name: idx_usage_billing_finalized_wallet; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_billing_finalized_wallet ON public.usage USING btree (billing_status, finalized_at, wallet_id);
--
-- Name: idx_usage_billing_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_billing_status ON public.usage USING btree (billing_status);
--
-- Name: idx_usage_endpoint_kind; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_endpoint_kind ON public.usage USING btree (endpoint_kind);
--
-- Name: idx_usage_error_category; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_error_category ON public.usage USING btree (error_category);
--
-- Name: idx_usage_family_kind; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_family_kind ON public.usage USING btree (api_family, endpoint_kind);
--
-- Name: idx_usage_model_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_model_created ON public.usage USING btree (model, created_at);
--
-- Name: idx_usage_provider_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_provider_created ON public.usage USING btree (provider_name, created_at);
--
-- Name: idx_usage_provider_key; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_provider_key ON public.usage USING btree (provider_id, provider_api_key_id);
--
-- Name: idx_usage_provider_model_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_provider_model_created ON public.usage USING btree (provider_name, model, created_at);
--
-- Name: idx_usage_status_user_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_status_user_created ON public.usage USING btree (status, user_id, created_at);
--
-- Name: idx_usage_user_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_user_created ON public.usage USING btree (user_id, created_at);
--
-- Name: idx_usage_wallet_finalized; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_wallet_finalized ON public.usage USING btree (wallet_id, finalized_at);
--
-- Name: idx_user_model_usage_model; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_user_model_usage_model ON public.user_model_usage_counts USING btree (model);
--
-- Name: idx_user_model_usage_user; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_user_model_usage_user ON public.user_model_usage_counts USING btree (user_id);
--
-- Name: idx_user_sessions_user_active; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_user_sessions_user_active ON public.user_sessions USING btree (user_id, revoked_at, expires_at);
--
-- Name: idx_user_sessions_user_device; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_user_sessions_user_device ON public.user_sessions USING btree (user_id, client_device_id);
--
-- Name: idx_video_tasks_external_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_video_tasks_external_id ON public.video_tasks USING btree (external_task_id);
--
-- Name: idx_video_tasks_next_poll; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_video_tasks_next_poll ON public.video_tasks USING btree (next_poll_at);
--
-- Name: idx_video_tasks_request_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_video_tasks_request_id ON public.video_tasks USING btree (request_id);
--
-- Name: idx_video_tasks_user_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_video_tasks_user_status ON public.video_tasks USING btree (user_id, status);
--
-- Name: idx_wallet_daily_usage_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_wallet_daily_usage_date ON public.wallet_daily_usage_ledgers USING btree (billing_date);
--
-- Name: idx_wallet_daily_usage_wallet_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_wallet_daily_usage_wallet_date ON public.wallet_daily_usage_ledgers USING btree (wallet_id, billing_date);
--
-- Name: idx_wallet_tx_category_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_wallet_tx_category_created ON public.wallet_transactions USING btree (category, created_at);
--
-- Name: idx_wallet_tx_link; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_wallet_tx_link ON public.wallet_transactions USING btree (link_type, link_id);
--
-- Name: idx_wallet_tx_reason_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_wallet_tx_reason_created ON public.wallet_transactions USING btree (reason_code, created_at);
--
-- Name: idx_wallet_tx_wallet_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_wallet_tx_wallet_created ON public.wallet_transactions USING btree (wallet_id, created_at);
--
-- Name: idx_wallets_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_wallets_status ON public.wallets USING btree (status);
--
-- Name: idx_window_time; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_window_time ON public.provider_usage_tracking USING btree (window_start, window_end);
--
-- Name: ix_announcement_reads_announcement_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_announcement_reads_announcement_id ON public.announcement_reads USING btree (announcement_id);
--
-- Name: ix_announcement_reads_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_announcement_reads_id ON public.announcement_reads USING btree (id);
--
-- Name: ix_announcements_author_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_announcements_author_id ON public.announcements USING btree (author_id);
--
-- Name: ix_announcements_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_announcements_created_at ON public.announcements USING btree (created_at);
--
-- Name: ix_announcements_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_announcements_id ON public.announcements USING btree (id);
--
-- Name: ix_announcements_is_active; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_announcements_is_active ON public.announcements USING btree (is_active);
--
-- Name: ix_api_key_provider_mappings_api_key_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_api_key_provider_mappings_api_key_id ON public.api_key_provider_mappings USING btree (api_key_id);
--
-- Name: ix_api_key_provider_mappings_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_api_key_provider_mappings_id ON public.api_key_provider_mappings USING btree (id);
--
-- Name: ix_api_key_provider_mappings_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_api_key_provider_mappings_provider_id ON public.api_key_provider_mappings USING btree (provider_id);
--
-- Name: ix_api_keys_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_api_keys_id ON public.api_keys USING btree (id);
--
-- Name: ix_api_keys_key_hash; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_api_keys_key_hash ON public.api_keys USING btree (key_hash);
--
-- Name: ix_api_keys_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_api_keys_user_id ON public.api_keys USING btree (user_id);
--
-- Name: ix_audit_logs_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_audit_logs_created_at ON public.audit_logs USING btree (created_at);
--
-- Name: ix_audit_logs_event_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_audit_logs_event_type ON public.audit_logs USING btree (event_type);
--
-- Name: ix_audit_logs_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_audit_logs_id ON public.audit_logs USING btree (id);
--
-- Name: ix_audit_logs_request_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_audit_logs_request_id ON public.audit_logs USING btree (request_id);
--
-- Name: ix_audit_logs_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_audit_logs_user_id ON public.audit_logs USING btree (user_id);
--
-- Name: ix_gemini_file_mappings_file_name; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_gemini_file_mappings_file_name ON public.gemini_file_mappings USING btree (file_name);
--
-- Name: ix_gemini_file_mappings_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_gemini_file_mappings_id ON public.gemini_file_mappings USING btree (id);
--
-- Name: ix_gemini_file_mappings_key_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_gemini_file_mappings_key_id ON public.gemini_file_mappings USING btree (key_id);
--
-- Name: ix_gemini_file_mappings_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_gemini_file_mappings_user_id ON public.gemini_file_mappings USING btree (user_id);
--
-- Name: ix_global_models_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_global_models_id ON public.global_models USING btree (id);
--
-- Name: ix_global_models_name; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_global_models_name ON public.global_models USING btree (name);
--
-- Name: ix_global_models_usage_count; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_global_models_usage_count ON public.global_models USING btree (usage_count);
--
-- Name: ix_management_tokens_token_hash; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_management_tokens_token_hash ON public.management_tokens USING btree (token_hash);
--
-- Name: ix_models_global_model_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_models_global_model_id ON public.models USING btree (global_model_id);
--
-- Name: ix_models_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_models_id ON public.models USING btree (id);
--
-- Name: ix_payment_callbacks_payment_order_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_payment_callbacks_payment_order_id ON public.payment_callbacks USING btree (payment_order_id);
--
-- Name: ix_provider_api_keys_circuit_breaker_by_format; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_provider_api_keys_circuit_breaker_by_format ON public.provider_api_keys USING gin (circuit_breaker_by_format);
--
-- Name: ix_provider_api_keys_health_by_format; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_provider_api_keys_health_by_format ON public.provider_api_keys USING gin (health_by_format);
--
-- Name: ix_provider_api_keys_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_provider_api_keys_id ON public.provider_api_keys USING btree (id);
--
-- Name: pool_member_scores_rank_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS pool_member_scores_rank_idx ON public.pool_member_scores USING btree (pool_kind, pool_id, capability, scope_kind, scope_id, hard_state, score DESC);
--
-- Name: pool_member_scores_member_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS pool_member_scores_member_idx ON public.pool_member_scores USING btree (pool_kind, pool_id, member_kind, member_id);
--
-- Name: pool_member_scores_probe_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS pool_member_scores_probe_idx ON public.pool_member_scores USING btree (pool_kind, pool_id, probe_status, last_probe_success_at);
--
-- Name: pool_member_scores_updated_at_idx; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS pool_member_scores_updated_at_idx ON public.pool_member_scores USING btree (updated_at);
--
-- Name: ix_provider_endpoints_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_provider_endpoints_id ON public.provider_endpoints USING btree (id);
--
-- Name: ix_provider_usage_tracking_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_provider_usage_tracking_id ON public.provider_usage_tracking USING btree (id);
--
-- Name: ix_provider_usage_tracking_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_provider_usage_tracking_provider_id ON public.provider_usage_tracking USING btree (provider_id);
--
-- Name: ix_provider_usage_tracking_window_start; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_provider_usage_tracking_window_start ON public.provider_usage_tracking USING btree (window_start);
--
-- Name: ix_providers_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_providers_id ON public.providers USING btree (id);
--
-- Name: ix_providers_name; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_providers_name ON public.providers USING btree (name);
--
-- Name: ix_proxy_node_events_node_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_proxy_node_events_node_id ON public.proxy_node_events USING btree (node_id);
--
-- Name: ix_proxy_nodes_registered_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_proxy_nodes_registered_by ON public.proxy_nodes USING btree (registered_by);
--
-- Name: ix_refund_requests_approved_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_refund_requests_approved_by ON public.refund_requests USING btree (approved_by);
--
-- Name: ix_refund_requests_payment_order_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_refund_requests_payment_order_id ON public.refund_requests USING btree (payment_order_id);
--
-- Name: ix_refund_requests_processed_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_refund_requests_processed_by ON public.refund_requests USING btree (processed_by);
--
-- Name: ix_refund_requests_requested_by; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_refund_requests_requested_by ON public.refund_requests USING btree (requested_by);
--
-- Name: ix_request_candidates_api_key_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_request_candidates_api_key_id ON public.request_candidates USING btree (api_key_id);
--
-- Name: ix_request_candidates_endpoint_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_request_candidates_endpoint_id ON public.request_candidates USING btree (endpoint_id);
--
-- Name: ix_request_candidates_key_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_request_candidates_key_id ON public.request_candidates USING btree (key_id);
--
-- Name: ix_request_candidates_request_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_request_candidates_request_id ON public.request_candidates USING btree (request_id);
--
-- Name: ix_request_candidates_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_request_candidates_user_id ON public.request_candidates USING btree (user_id);
--
-- Name: ix_stats_daily_date; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_stats_daily_date ON public.stats_daily USING btree (date);
--
-- Name: ix_stats_user_daily_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_stats_user_daily_date ON public.stats_user_daily USING btree (date);
--
-- Name: ix_system_configs_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_system_configs_id ON public.system_configs USING btree (id);
--
-- Name: ix_usage_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_usage_created_at ON public.usage USING btree (created_at);
--
-- Name: ix_usage_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_usage_id ON public.usage USING btree (id);
--
-- Name: ix_usage_provider_api_key_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_usage_provider_api_key_id ON public.usage USING btree (provider_api_key_id);
--
-- Name: ix_usage_provider_endpoint_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_usage_provider_endpoint_id ON public.usage USING btree (provider_endpoint_id);
--
-- Name: ix_usage_request_id; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_usage_request_id ON public.usage USING btree (request_id);
--
-- Name: ix_usage_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_usage_status ON public.usage USING btree (status);
--
-- Name: ix_usage_wallet_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_usage_wallet_id ON public.usage USING btree (wallet_id);
--
-- Name: ix_user_oauth_links_provider_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_user_oauth_links_provider_type ON public.user_oauth_links USING btree (provider_type);
--
-- Name: ix_user_oauth_links_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_user_oauth_links_user_id ON public.user_oauth_links USING btree (user_id);
--
-- Name: ix_user_preferences_default_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_user_preferences_default_provider_id ON public.user_preferences USING btree (default_provider_id);
--
-- Name: ix_user_preferences_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_user_preferences_id ON public.user_preferences USING btree (id);
--
-- Name: ix_user_sessions_client_device_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_user_sessions_client_device_id ON public.user_sessions USING btree (client_device_id);
--
-- Name: ix_user_sessions_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_user_sessions_user_id ON public.user_sessions USING btree (user_id);
--
-- Name: ix_users_email; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_users_email ON public.users USING btree (email);
--
-- Name: ix_users_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_users_id ON public.users USING btree (id);
--
-- Name: ix_users_ldap_dn; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_users_ldap_dn ON public.users USING btree (ldap_dn);
--
-- Name: ix_users_ldap_username; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_users_ldap_username ON public.users USING btree (ldap_username);
--
-- Name: ix_users_username; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_users_username ON public.users USING btree (username);
--
-- Name: ix_video_tasks_api_key_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_video_tasks_api_key_id ON public.video_tasks USING btree (api_key_id);
--
-- Name: ix_video_tasks_endpoint_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_video_tasks_endpoint_id ON public.video_tasks USING btree (endpoint_id);
--
-- Name: ix_video_tasks_key_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_video_tasks_key_id ON public.video_tasks USING btree (key_id);
--
-- Name: ix_video_tasks_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_video_tasks_provider_id ON public.video_tasks USING btree (provider_id);
--
-- Name: ix_video_tasks_remixed_from_task_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_video_tasks_remixed_from_task_id ON public.video_tasks USING btree (remixed_from_task_id);
--
-- Name: ix_video_tasks_short_id; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS ix_video_tasks_short_id ON public.video_tasks USING btree (short_id);
--
-- Name: ix_wallet_transactions_operator_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS ix_wallet_transactions_operator_id ON public.wallet_transactions USING btree (operator_id);
--
-- Name: uq_billing_rules_global_model_task; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS uq_billing_rules_global_model_task ON public.billing_rules USING btree (global_model_id, task_type) WHERE ((is_enabled = true) AND (global_model_id IS NOT NULL));
--
-- Name: uq_billing_rules_model_task; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS uq_billing_rules_model_task ON public.billing_rules USING btree (model_id, task_type) WHERE ((is_enabled = true) AND (model_id IS NOT NULL));
--
-- Name: uq_dimension_collectors_enabled; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS uq_dimension_collectors_enabled ON public.dimension_collectors USING btree (api_format, task_type, dimension_name, priority) WHERE (is_enabled = true);
--
-- Name: announcement_reads announcement_reads_announcement_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.announcement_reads
ADD CONSTRAINT announcement_reads_announcement_id_fkey FOREIGN KEY (announcement_id) REFERENCES public.announcements(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: announcement_reads announcement_reads_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.announcement_reads
ADD CONSTRAINT announcement_reads_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: announcements announcements_author_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.announcements
ADD CONSTRAINT announcements_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: api_key_provider_mappings api_key_provider_mappings_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.api_key_provider_mappings
ADD CONSTRAINT api_key_provider_mappings_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: api_key_provider_mappings api_key_provider_mappings_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.api_key_provider_mappings
ADD CONSTRAINT api_key_provider_mappings_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.providers(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: api_keys api_keys_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.api_keys
ADD CONSTRAINT api_keys_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: audit_logs audit_logs_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.audit_logs
ADD CONSTRAINT audit_logs_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: billing_rules billing_rules_global_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.billing_rules
ADD CONSTRAINT billing_rules_global_model_id_fkey FOREIGN KEY (global_model_id) REFERENCES public.global_models(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: billing_rules billing_rules_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.billing_rules
ADD CONSTRAINT billing_rules_model_id_fkey FOREIGN KEY (model_id) REFERENCES public.models(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: provider_api_keys fk_provider_api_keys_provider; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.provider_api_keys
ADD CONSTRAINT fk_provider_api_keys_provider FOREIGN KEY (provider_id) REFERENCES public.providers(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: gemini_file_mappings gemini_file_mappings_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.gemini_file_mappings
ADD CONSTRAINT gemini_file_mappings_key_id_fkey FOREIGN KEY (key_id) REFERENCES public.provider_api_keys(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: gemini_file_mappings gemini_file_mappings_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.gemini_file_mappings
ADD CONSTRAINT gemini_file_mappings_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: management_tokens management_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.management_tokens
ADD CONSTRAINT management_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: models models_global_model_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.models
ADD CONSTRAINT models_global_model_id_fkey FOREIGN KEY (global_model_id) REFERENCES public.global_models(id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: models models_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.models
ADD CONSTRAINT models_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.providers(id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: payment_callbacks payment_callbacks_payment_order_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.payment_callbacks
ADD CONSTRAINT payment_callbacks_payment_order_id_fkey FOREIGN KEY (payment_order_id) REFERENCES public.payment_orders(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: payment_orders payment_orders_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.payment_orders
ADD CONSTRAINT payment_orders_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: payment_orders payment_orders_wallet_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.payment_orders
ADD CONSTRAINT payment_orders_wallet_id_fkey FOREIGN KEY (wallet_id) REFERENCES public.wallets(id) ON DELETE RESTRICT;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: provider_endpoints provider_endpoints_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.provider_endpoints
ADD CONSTRAINT provider_endpoints_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.providers(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: provider_usage_tracking provider_usage_tracking_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.provider_usage_tracking
ADD CONSTRAINT provider_usage_tracking_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.providers(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: proxy_node_events proxy_node_events_node_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.proxy_node_events
ADD CONSTRAINT proxy_node_events_node_id_fkey FOREIGN KEY (node_id) REFERENCES public.proxy_nodes(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: proxy_nodes proxy_nodes_registered_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.proxy_nodes
ADD CONSTRAINT proxy_nodes_registered_by_fkey FOREIGN KEY (registered_by) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests refund_requests_approved_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT refund_requests_approved_by_fkey FOREIGN KEY (approved_by) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests refund_requests_payment_order_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT refund_requests_payment_order_id_fkey FOREIGN KEY (payment_order_id) REFERENCES public.payment_orders(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests refund_requests_processed_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT refund_requests_processed_by_fkey FOREIGN KEY (processed_by) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests refund_requests_requested_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT refund_requests_requested_by_fkey FOREIGN KEY (requested_by) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests refund_requests_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT refund_requests_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: refund_requests refund_requests_wallet_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.refund_requests
ADD CONSTRAINT refund_requests_wallet_id_fkey FOREIGN KEY (wallet_id) REFERENCES public.wallets(id) ON DELETE RESTRICT;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: request_candidates request_candidates_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.request_candidates
ADD CONSTRAINT request_candidates_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: request_candidates request_candidates_endpoint_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.request_candidates
ADD CONSTRAINT request_candidates_endpoint_id_fkey FOREIGN KEY (endpoint_id) REFERENCES public.provider_endpoints(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: request_candidates request_candidates_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.request_candidates
ADD CONSTRAINT request_candidates_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.providers(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: request_candidates request_candidates_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.request_candidates
ADD CONSTRAINT request_candidates_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_daily_api_key stats_daily_api_key_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_daily_api_key
ADD CONSTRAINT stats_daily_api_key_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: stats_user_daily stats_user_daily_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.stats_user_daily
ADD CONSTRAINT stats_user_daily_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: usage usage_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.usage
ADD CONSTRAINT usage_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: usage usage_provider_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.usage
ADD CONSTRAINT usage_provider_api_key_id_fkey FOREIGN KEY (provider_api_key_id) REFERENCES public.provider_api_keys(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: usage usage_provider_endpoint_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.usage
ADD CONSTRAINT usage_provider_endpoint_id_fkey FOREIGN KEY (provider_endpoint_id) REFERENCES public.provider_endpoints(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: usage usage_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.usage
ADD CONSTRAINT usage_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: usage usage_wallet_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.usage
ADD CONSTRAINT usage_wallet_id_fkey FOREIGN KEY (wallet_id) REFERENCES public.wallets(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_model_usage_counts user_model_usage_counts_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_model_usage_counts
ADD CONSTRAINT user_model_usage_counts_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_oauth_links user_oauth_links_provider_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_oauth_links
ADD CONSTRAINT user_oauth_links_provider_type_fkey FOREIGN KEY (provider_type) REFERENCES public.oauth_providers(provider_type) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_oauth_links user_oauth_links_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_oauth_links
ADD CONSTRAINT user_oauth_links_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_preferences user_preferences_default_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_preferences
ADD CONSTRAINT user_preferences_default_provider_id_fkey FOREIGN KEY (default_provider_id) REFERENCES public.providers(id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_preferences user_preferences_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_preferences
ADD CONSTRAINT user_preferences_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: user_sessions user_sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.user_sessions
ADD CONSTRAINT user_sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks video_tasks_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT video_tasks_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks video_tasks_endpoint_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT video_tasks_endpoint_id_fkey FOREIGN KEY (endpoint_id) REFERENCES public.provider_endpoints(id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks video_tasks_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT video_tasks_key_id_fkey FOREIGN KEY (key_id) REFERENCES public.provider_api_keys(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks video_tasks_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT video_tasks_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.providers(id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks video_tasks_remixed_from_task_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT video_tasks_remixed_from_task_id_fkey FOREIGN KEY (remixed_from_task_id) REFERENCES public.video_tasks(id);
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: video_tasks video_tasks_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.video_tasks
ADD CONSTRAINT video_tasks_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallet_daily_usage_ledgers wallet_daily_usage_ledgers_wallet_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallet_daily_usage_ledgers
ADD CONSTRAINT wallet_daily_usage_ledgers_wallet_id_fkey FOREIGN KEY (wallet_id) REFERENCES public.wallets(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallet_transactions wallet_transactions_operator_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallet_transactions
ADD CONSTRAINT wallet_transactions_operator_id_fkey FOREIGN KEY (operator_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallet_transactions wallet_transactions_wallet_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallet_transactions
ADD CONSTRAINT wallet_transactions_wallet_id_fkey FOREIGN KEY (wallet_id) REFERENCES public.wallets(id) ON DELETE CASCADE;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallets wallets_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallets
ADD CONSTRAINT wallets_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
--
-- Name: wallets wallets_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
DO $mig$ BEGIN
ALTER TABLE ONLY public.wallets
ADD CONSTRAINT wallets_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
EXCEPTION
WHEN duplicate_object THEN NULL;
WHEN duplicate_table THEN NULL;
WHEN invalid_table_definition THEN NULL;
END $mig$;
-- Restore a normal lookup path before sqlx records this migration in the
-- same transaction. sqlx inserts into `_sqlx_migrations` unqualified.
SELECT pg_catalog.set_config('search_path', 'public', true);
--
-- PostgreSQL database dump complete
--