Files
Containr/app/backend/migrations_goose/20260401163000_baseline.sql
Tomas Dvorak 9e3aa3aa17 Consolidate backend: drop vendored APwhy, converge on goose + sqlc
Phase 0 cleanup verified end-to-end:

- Delete vendored APwhy runtime (cmd/apwhy, internal/apwhy) and the
  unwired copy (internal/api/server.go + static bundle + cloned
  internal/{storage,analytics,auth,rbac}) — ~7.5k lines of dead code.
- Keep Containr's native internal/gateway; move APwhy management
  routes under /api/v1/gateway/* so they stop colliding with the
  native /services paths. Fix handlers against the real schema:
  UUID ids via RETURNING, integer enabled flags, plan validation,
  service validate endpoint, unique-violation mapping.
- Port agents.go off GORM onto sqlc (sqlc/queries/agents.sql);
  drop gorm dependencies; fix sqlc schema drift (services.environment_id).
- Replace the SELECT 1 goose baseline with the real consolidated
  schema (52 tables) minus APwhy's parallel auth/RBAC objects;
  idempotent via IF NOT EXISTS / OR REPLACE / guarded DO blocks so it
  replays cleanly over legacy installs. Add a drop migration for the
  dead objects and delete the legacy filename-tracked migrations/
  loader, directory, and Dockerfile copy. Verified via cmd/migrate:
  fresh install 53 tables, legacy upgrade clean to 20260917000000.
- Canvas: add invisible React Flow handles to ServiceNode so inferred
  auto-connections stop emitting warning #008.
- Remove reactflow dep (superseded by @xyflow/react), test harness
  cmds, and legacy 0001_init.sql backups.

Authored By: TDvorak <[email protected]>
2026-09-17 09:40:08 +02:00

5227 lines
158 KiB
PL/PgSQL

-- +goose Up
-- Consolidated baseline schema for Containr.
-- Replaces the legacy filename-tracked migrations/ directory. Idempotent by
-- construction so it is safe on databases that partially applied legacy files.
--
-- PostgreSQL database dump
--
-- Dumped from database version 15.19
-- Dumped by pg_dump version 15.19
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', 'public', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: cleanup_old_metrics(); Type: FUNCTION; Schema: public; Owner: -
--
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION public.cleanup_old_metrics() RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
DELETE FROM database_metrics
WHERE recorded_at < NOW() - INTERVAL '30 days';
END;
$$;
-- +goose StatementEnd
--
-- Name: complete_backup(character varying, boolean); Type: FUNCTION; Schema: public; Owner: -
--
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION public.complete_backup(backup_id_param character varying, success_param boolean) RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE
db_id VARCHAR(255);
BEGIN
-- Get database_id from backup
SELECT database_id INTO db_id FROM database_backups WHERE id = backup_id_param;
IF db_id IS NOT NULL THEN
-- Update backup completion time if successful
IF success_param THEN
UPDATE database_backups
SET status = 'completed', completed_at = NOW()
WHERE id = backup_id_param;
-- Update last_backup_time in settings
UPDATE database_settings
SET last_backup_time = NOW()
WHERE database_id = db_id;
-- Schedule next backup
PERFORM schedule_next_backup(db_id);
ELSE
UPDATE database_backups
SET status = 'failed'
WHERE id = backup_id_param;
END IF;
END IF;
END;
$$;
-- +goose StatementEnd
--
-- Name: get_project_stats(uuid); Type: FUNCTION; Schema: public; Owner: -
--
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION public.get_project_stats(project_uuid uuid) RETURNS TABLE(service_count bigint, deployment_count bigint, running_services bigint, last_deployment timestamp with time zone)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT
COUNT(DISTINCT s.id),
COUNT(DISTINCT d.id),
COUNT(DISTINCT CASE WHEN s.status = 'running' THEN s.id END),
MAX(d.created_at)
FROM services s
LEFT JOIN deployments d ON s.id = d.service_id
WHERE s.project_id = project_uuid;
END;
$$;
-- +goose StatementEnd
--
-- Name: FUNCTION get_project_stats(project_uuid uuid); Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON FUNCTION public.get_project_stats(project_uuid uuid) IS 'Returns deployment and service summary for a single project';
--
-- Name: schedule_next_backup(character varying); Type: FUNCTION; Schema: public; Owner: -
--
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION public.schedule_next_backup(database_id_param character varying) RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
UPDATE database_settings
SET next_backup_time = NOW() + INTERVAL '24 hours'
WHERE database_id = database_id_param;
END;
$$;
-- +goose StatementEnd
--
-- Name: update_preview_environments_updated_at(); Type: FUNCTION; Schema: public; Owner: -
--
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION public.update_preview_environments_updated_at() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$;
-- +goose StatementEnd
--
-- Name: update_updated_at_column(); Type: FUNCTION; Schema: public; Owner: -
--
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION public.update_updated_at_column() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$;
-- +goose StatementEnd
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: agent_commands; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.agent_commands (
id character varying(255) NOT NULL,
type character varying(100) NOT NULL,
node_agent_id character varying(255) NOT NULL,
container_id character varying(255),
payload jsonb,
status character varying(50) DEFAULT 'pending'::character varying,
result text,
error text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
completed_at timestamp with time zone
);
--
-- Name: TABLE agent_commands; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.agent_commands IS 'Commands sent to node agents for execution';
--
-- Name: agent_heartbeats; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.agent_heartbeats (
id character varying(255) NOT NULL,
node_agent_id character varying(255) NOT NULL,
"timestamp" timestamp with time zone DEFAULT now() NOT NULL,
status character varying(50) DEFAULT 'unknown'::character varying NOT NULL,
resources jsonb DEFAULT '{}'::jsonb NOT NULL,
container_count integer DEFAULT 0 NOT NULL,
system_load jsonb DEFAULT '{}'::jsonb NOT NULL,
uptime bigint DEFAULT 0 NOT NULL,
version character varying(50) DEFAULT ''::character varying NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: alert_incidents; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.alert_incidents (
id uuid DEFAULT gen_random_uuid() NOT NULL,
rule_id uuid NOT NULL,
metric_type character varying(50) NOT NULL,
metric_field character varying(100) NOT NULL,
current_value numeric(15,4) NOT NULL,
threshold numeric(15,4) NOT NULL,
severity character varying(20) NOT NULL,
status character varying(20) DEFAULT 'firing'::character varying,
started_at timestamp with time zone NOT NULL,
resolved_at timestamp with time zone,
duration interval,
description text,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: alert_rules; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.alert_rules (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(255) NOT NULL,
description text,
metric_type character varying(50) NOT NULL,
metric_field character varying(100) NOT NULL,
condition character varying(20) NOT NULL,
threshold numeric(15,4) NOT NULL,
duration interval DEFAULT '00:05:00'::interval,
severity character varying(20) DEFAULT 'warning'::character varying,
enabled boolean DEFAULT true,
filters jsonb DEFAULT '{}'::jsonb,
notification_channels jsonb DEFAULT '[]'::jsonb,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: anonymized_data; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.anonymized_data (
id uuid DEFAULT gen_random_uuid() NOT NULL,
original_id uuid NOT NULL,
anonymized_id character varying(255) NOT NULL,
data_type character varying(100) NOT NULL,
anonymized_at timestamp with time zone DEFAULT now() NOT NULL,
retained_data text,
created_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: TABLE anonymized_data; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.anonymized_data IS 'Anonymized user data for privacy compliance';
--
-- Name: api_keys; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.api_keys (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name text NOT NULL,
key_hash text NOT NULL,
key_prefix text NOT NULL,
plan text DEFAULT 'free'::text NOT NULL,
allowed_service_ids text DEFAULT '[]'::text NOT NULL,
enabled integer DEFAULT 1 NOT NULL,
rpm_limit integer DEFAULT 60,
monthly_quota integer DEFAULT 1000,
created_at timestamp without time zone DEFAULT now() NOT NULL,
updated_at timestamp without time zone DEFAULT now() NOT NULL,
last_used_at timestamp without time zone
);
--
-- Name: api_services; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.api_services (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name text NOT NULL,
slug text NOT NULL,
upstream_url text NOT NULL,
route_prefix text NOT NULL,
health_path text DEFAULT '/health'::text NOT NULL,
upstream_auth_header text,
upstream_auth_value text,
internal_token text,
enabled integer DEFAULT 1 NOT NULL,
rpm_limit integer,
monthly_quota integer,
request_timeout_ms integer DEFAULT 8000,
last_validation_at timestamp without time zone,
last_validation_status text,
last_validation_message text,
created_at timestamp without time zone DEFAULT now() NOT NULL,
updated_at timestamp without time zone DEFAULT now() NOT NULL
);
--
-- Name: audit_logs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.audit_logs (
id uuid DEFAULT gen_random_uuid() NOT NULL,
"timestamp" timestamp with time zone DEFAULT now() NOT NULL,
user_id uuid,
action character varying(100) NOT NULL,
resource character varying(100) NOT NULL,
resource_id uuid,
details jsonb DEFAULT '{}'::jsonb,
ip_address inet,
user_agent text,
success boolean DEFAULT true NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL
);
--
-- Name: TABLE audit_logs; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.audit_logs IS 'Security audit trail for all sensitive operations';
--
-- Name: builds; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.builds (
id character varying(255) NOT NULL,
project_id character varying(255),
service_id character varying(255),
status character varying(50) DEFAULT 'pending'::character varying NOT NULL,
progress integer DEFAULT 0 NOT NULL,
started_at timestamp with time zone DEFAULT now() NOT NULL,
completed_at timestamp with time zone,
image_name character varying(500) DEFAULT ''::character varying NOT NULL,
image_tag character varying(200) DEFAULT ''::character varying NOT NULL,
size bigint DEFAULT 0 NOT NULL,
error text,
log text DEFAULT ''::text NOT NULL,
metadata jsonb DEFAULT '{}'::jsonb NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT builds_progress_range CHECK (((progress >= 0) AND (progress <= 100)))
);
--
-- Name: cluster_agents; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.cluster_agents (
cluster_id character varying(255) NOT NULL,
agent_id character varying(255) NOT NULL,
added_at timestamp with time zone DEFAULT now()
);
--
-- Name: TABLE cluster_agents; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.cluster_agents IS 'Many-to-many relationship between clusters and agents';
--
-- Name: compliance_controls; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.compliance_controls (
id uuid DEFAULT gen_random_uuid() NOT NULL,
framework_id uuid NOT NULL,
code character varying(50) NOT NULL,
title character varying(255) NOT NULL,
description text,
category character varying(100),
requirement text,
test_procedure text,
status character varying(50) DEFAULT 'pending'::character varying NOT NULL,
last_assessed timestamp with time zone,
evidence text,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT compliance_controls_status_check CHECK (((status)::text = ANY ((ARRAY['compliant'::character varying, 'non_compliant'::character varying, 'not_applicable'::character varying, 'pending'::character varying])::text[])))
);
--
-- Name: TABLE compliance_controls; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.compliance_controls IS 'Individual controls within compliance frameworks';
--
-- Name: compliance_frameworks; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.compliance_frameworks (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(100) NOT NULL,
description text,
version character varying(20) NOT NULL,
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: TABLE compliance_frameworks; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.compliance_frameworks IS 'Compliance frameworks like GDPR, SOC2, etc.';
--
-- Name: compliance_reports; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.compliance_reports (
id uuid DEFAULT gen_random_uuid() NOT NULL,
project_id uuid NOT NULL,
framework_id uuid NOT NULL,
assessment_date timestamp with time zone DEFAULT now() NOT NULL,
assessor character varying(255),
overall_status character varying(50) NOT NULL,
score 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,
CONSTRAINT compliance_reports_overall_status_check CHECK (((overall_status)::text = ANY ((ARRAY['compliant'::character varying, 'partially_compliant'::character varying, 'non_compliant'::character varying, 'in_progress'::character varying])::text[]))),
CONSTRAINT compliance_reports_score_check CHECK (((score >= 0) AND (score <= 100)))
);
--
-- Name: TABLE compliance_reports; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.compliance_reports IS 'Compliance assessment reports';
--
-- Name: compliance_risks; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.compliance_risks (
id uuid DEFAULT gen_random_uuid() NOT NULL,
report_id uuid NOT NULL,
control_id uuid NOT NULL,
title character varying(255) NOT NULL,
description text,
impact character varying(20) NOT NULL,
likelihood character varying(20) NOT NULL,
mitigation text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT compliance_risks_impact_check CHECK (((impact)::text = ANY ((ARRAY['high'::character varying, 'medium'::character varying, 'low'::character varying])::text[]))),
CONSTRAINT compliance_risks_likelihood_check CHECK (((likelihood)::text = ANY ((ARRAY['high'::character varying, 'medium'::character varying, 'low'::character varying])::text[])))
);
--
-- Name: TABLE compliance_risks; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.compliance_risks IS 'Risk assessments for compliance gaps';
--
-- Name: container_instances; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.container_instances (
id character varying(255) NOT NULL,
name character varying(255) NOT NULL,
image character varying(255) NOT NULL,
project_id character varying(255) NOT NULL,
service_id character varying(255) NOT NULL,
node_agent_id character varying(255) NOT NULL,
status jsonb,
resources jsonb,
ports jsonb,
environment jsonb,
volumes jsonb,
networks jsonb,
restart_policy jsonb,
health_check jsonb,
created_at timestamp with time zone DEFAULT now(),
started_at timestamp with time zone,
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: TABLE container_instances; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.container_instances IS 'Container instances running on node agents';
--
-- Name: container_metrics; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.container_metrics (
id integer NOT NULL,
container_id character varying(255) NOT NULL,
"timestamp" timestamp with time zone DEFAULT now(),
cpu_usage numeric(5,2),
cpu_usage_percent numeric(5,2),
memory_usage bigint,
memory_usage_percent numeric(5,2),
memory_limit bigint,
network_rx_bytes bigint,
network_tx_bytes bigint,
network_rx_packets bigint,
network_tx_packets bigint,
block_read_bytes bigint,
block_write_bytes bigint,
pids_current integer,
pids_limit integer
);
--
-- Name: TABLE container_metrics; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.container_metrics IS 'Metrics collected from running containers';
--
-- Name: container_metrics_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS public.container_metrics_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: container_metrics_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.container_metrics_id_seq OWNED BY public.container_metrics.id;
--
-- Name: cron_executions; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.cron_executions (
id uuid DEFAULT gen_random_uuid() NOT NULL,
cron_job_id uuid NOT NULL,
started_at timestamp with time zone NOT NULL,
finished_at timestamp with time zone,
status character varying(50) DEFAULT 'pending'::character varying,
output text,
error text
);
--
-- Name: cron_jobs; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.cron_jobs (
id uuid DEFAULT gen_random_uuid() NOT NULL,
project_id uuid NOT NULL,
service_id uuid NOT NULL,
name character varying(255) NOT NULL,
schedule character varying(100) NOT NULL,
command text NOT NULL,
timezone character varying(50) DEFAULT 'UTC'::character varying,
enabled boolean DEFAULT true,
last_run_at timestamp with time zone,
next_run_at timestamp with time zone,
last_status character varying(50),
last_output text,
retention integer DEFAULT 30,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: data_retention_policies; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.data_retention_policies (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(100) NOT NULL,
data_type character varying(100) NOT NULL,
retention_period interval NOT NULL,
action character varying(50) NOT NULL,
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 data_retention_policies_action_check CHECK (((action)::text = ANY ((ARRAY['delete'::character varying, 'anonymize'::character varying, 'archive'::character varying])::text[])))
);
--
-- Name: TABLE data_retention_policies; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.data_retention_policies IS 'Data retention and deletion policies';
--
-- Name: database_backups; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.database_backups (
id character varying(255) NOT NULL,
database_id character varying(255) NOT NULL,
size character varying(50) NOT NULL,
status character varying(50) DEFAULT 'in_progress'::character varying NOT NULL,
backup_path text,
created_at timestamp with time zone DEFAULT now(),
completed_at timestamp with time zone,
CONSTRAINT database_backups_status_check CHECK (((status)::text = ANY ((ARRAY['completed'::character varying, 'failed'::character varying, 'in_progress'::character varying])::text[])))
);
--
-- Name: database_metrics; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.database_metrics (
id integer NOT NULL,
database_id character varying(255) NOT NULL,
cpu_usage numeric(5,2),
memory_usage numeric(5,2),
storage_usage numeric(5,2),
active_connections integer,
read_iops integer,
write_iops integer,
network_in_mbps numeric(8,2),
network_out_mbps numeric(8,2),
recorded_at timestamp with time zone DEFAULT now()
);
--
-- Name: database_metrics_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS public.database_metrics_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: database_metrics_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.database_metrics_id_seq OWNED BY public.database_metrics.id;
--
-- Name: database_services; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.database_services (
id character varying(255) NOT NULL,
user_id uuid NOT NULL,
name character varying(255) NOT NULL,
type character varying(50) NOT NULL,
status character varying(50) DEFAULT 'building'::character varying NOT NULL,
version character varying(50) NOT NULL,
plan character varying(50) NOT NULL,
region character varying(50) NOT NULL,
connection_url text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT database_services_plan_check CHECK (((plan)::text = ANY ((ARRAY['hobby'::character varying, 'starter'::character varying, 'standard'::character varying, 'business'::character varying])::text[]))),
CONSTRAINT database_services_status_check CHECK (((status)::text = ANY ((ARRAY['running'::character varying, 'stopped'::character varying, 'building'::character varying, 'error'::character varying])::text[]))),
CONSTRAINT database_services_type_check CHECK (((type)::text = ANY ((ARRAY['postgresql'::character varying, 'redis'::character varying, 'mysql'::character varying, 'mariadb'::character varying, 'mongodb'::character varying, 'clickhouse'::character varying, 'dragonfly'::character varying])::text[])))
);
--
-- Name: database_settings; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.database_settings (
database_id character varying(255) NOT NULL,
max_connections integer DEFAULT 100,
timeout integer DEFAULT 30,
ssl_enabled boolean DEFAULT true,
logging_enabled boolean DEFAULT true,
retention_days integer DEFAULT 30,
backup_enabled boolean DEFAULT true,
next_backup_time timestamp with time zone,
last_backup_time timestamp with time zone
);
--
-- Name: database_stats; Type: VIEW; Schema: public; Owner: -
--
CREATE OR REPLACE VIEW public.database_stats AS
SELECT ds.id,
ds.name,
ds.type,
ds.status,
ds.plan,
ds.region,
ds.created_at,
ds.updated_at,
count(db.id) AS backup_count,
max(db.created_at) AS last_backup_time,
latest_dm.cpu_usage AS latest_cpu,
latest_dm.memory_usage AS latest_memory,
latest_dm.storage_usage AS latest_storage,
latest_dm.active_connections AS latest_connections,
latest_dm.recorded_at AS metrics_updated_at
FROM ((public.database_services ds
LEFT JOIN public.database_backups db ON ((((ds.id)::text = (db.database_id)::text) AND ((db.status)::text = 'completed'::text))))
LEFT JOIN LATERAL ( SELECT database_metrics.cpu_usage,
database_metrics.memory_usage,
database_metrics.storage_usage,
database_metrics.active_connections,
database_metrics.recorded_at
FROM public.database_metrics
WHERE ((database_metrics.database_id)::text = (ds.id)::text)
ORDER BY database_metrics.recorded_at DESC
LIMIT 1) latest_dm ON (true))
GROUP BY ds.id, ds.name, ds.type, ds.status, ds.plan, ds.region, ds.created_at, ds.updated_at, latest_dm.cpu_usage, latest_dm.memory_usage, latest_dm.storage_usage, latest_dm.active_connections, latest_dm.recorded_at;
--
-- Name: deployments; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.deployments (
id uuid DEFAULT gen_random_uuid() NOT NULL,
service_id uuid NOT NULL,
version character varying(100) NOT NULL,
commit_hash character varying(100),
image_digest character varying(500),
status character varying(50) DEFAULT 'created'::character varying,
build_log text,
deployment_log text,
started_at timestamp with time zone,
completed_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
image_name character varying(500),
image_tag character varying(100),
runtime_log text,
error text
);
--
-- Name: dns_records; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.dns_records (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(255) NOT NULL,
type character varying(10) NOT NULL,
ttl integer DEFAULT 300,
records jsonb NOT NULL,
priority integer,
weight integer,
port integer,
service_id character varying(255),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: environment_variables; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.environment_variables (
id uuid DEFAULT gen_random_uuid() NOT NULL,
service_id uuid NOT NULL,
key character varying(255) NOT NULL,
value text,
is_secret boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: environments; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.environments (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(50) NOT NULL,
project_id uuid NOT NULL,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: git_branches; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.git_branches (
id uuid DEFAULT gen_random_uuid() NOT NULL,
repo_id uuid NOT NULL,
name character varying(255) NOT NULL,
last_commit_hash character varying(100),
last_commit_message text,
last_commit_author character varying(255),
last_commit_date timestamp with time zone,
is_protected boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: git_deployment_triggers; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.git_deployment_triggers (
id uuid DEFAULT gen_random_uuid() NOT NULL,
webhook_id uuid NOT NULL,
service_id uuid NOT NULL,
branch character varying(255) NOT NULL,
environment character varying(50) NOT NULL,
auto_deploy boolean DEFAULT false,
build_command text,
start_command text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: git_providers; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.git_providers (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(50) NOT NULL,
display_name character varying(255) NOT NULL,
api_url character varying(500) NOT NULL,
webhook_url character varying(500) NOT NULL,
access_token text NOT NULL,
user_id uuid NOT NULL,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: git_repositories; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.git_repositories (
id uuid DEFAULT gen_random_uuid() NOT NULL,
provider_id uuid NOT NULL,
name character varying(255) NOT NULL,
full_name character varying(500) NOT NULL,
description text,
clone_url character varying(500) NOT NULL,
webhook_url character varying(500),
default_branch character varying(100) DEFAULT 'main'::character varying,
is_private boolean DEFAULT false,
user_id uuid NOT NULL,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: git_webhooks; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.git_webhooks (
id uuid DEFAULT gen_random_uuid() NOT NULL,
repo_id uuid NOT NULL,
provider_id uuid NOT NULL,
events text NOT NULL,
webhook_secret text NOT NULL,
remote_webhook_id character varying(255),
active boolean DEFAULT true,
branch_filter character varying(100),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: incident_events; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.incident_events (
id integer NOT NULL,
service_id uuid,
api_key_id uuid,
code text NOT NULL,
message text NOT NULL,
severity text DEFAULT 'medium'::text NOT NULL,
http_status integer,
count integer DEFAULT 1 NOT NULL,
occurred_at timestamp without time zone DEFAULT now() NOT NULL
);
--
-- Name: incident_events_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS public.incident_events_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: incident_events_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.incident_events_id_seq OWNED BY public.incident_events.id;
--
-- Name: instance_metrics; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.instance_metrics (
service_id character varying(255) NOT NULL,
"timestamp" timestamp with time zone NOT NULL,
instance_id character varying(255) NOT NULL,
node_id character varying(255),
status character varying(50),
cpu numeric(5,2),
memory bigint,
network_bytes_in bigint,
network_bytes_out bigint,
network_packets_in bigint,
network_packets_out bigint,
network_connections_in integer,
network_connections_out integer,
network_errors_in bigint,
network_errors_out bigint,
start_time timestamp with time zone,
last_seen timestamp with time zone,
health_status character varying(20),
health_last_check timestamp with time zone,
health_check_count integer DEFAULT 0,
health_failure_count integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: metrics_aggregation_rules; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.metrics_aggregation_rules (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(255) NOT NULL,
metric_type character varying(50) NOT NULL,
aggregation_function character varying(50) NOT NULL,
"interval" interval NOT NULL,
retention_period interval DEFAULT '30 days'::interval,
fields jsonb NOT NULL,
filters jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: metrics_timeseries; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.metrics_timeseries (
id integer NOT NULL,
metric text NOT NULL,
value real NOT NULL,
labels_json text,
occurred_at timestamp without time zone DEFAULT now() NOT NULL
);
--
-- Name: metrics_timeseries_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS public.metrics_timeseries_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: metrics_timeseries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.metrics_timeseries_id_seq OWNED BY public.metrics_timeseries.id;
--
-- Name: node_agents; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.node_agents (
id character varying(255) NOT NULL,
name character varying(255) NOT NULL,
hostname character varying(255) NOT NULL,
ip_address character varying(45) NOT NULL,
port integer NOT NULL,
status character varying(50) DEFAULT 'offline'::character varying,
version character varying(50),
capabilities jsonb,
resources jsonb,
last_heartbeat timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
metadata jsonb
);
--
-- Name: TABLE node_agents; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.node_agents IS 'Container orchestration agents that manage containers on nodes';
--
-- Name: node_clusters; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.node_clusters (
id character varying(255) NOT NULL,
name character varying(255) NOT NULL,
description text,
status character varying(50) DEFAULT 'active'::character varying,
total_resources jsonb,
used_resources jsonb,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: TABLE node_clusters; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.node_clusters IS 'Clusters of node agents for resource pooling';
--
-- Name: node_metrics; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.node_metrics (
node_id character varying(255) NOT NULL,
"timestamp" timestamp with time zone NOT NULL,
cpu_usage numeric(5,2),
cpu_cores numeric(10,2),
load_avg_1 numeric(5,2),
load_avg_5 numeric(5,2),
load_avg_15 numeric(5,2),
memory_total bigint,
memory_used bigint,
memory_available bigint,
memory_usage_percent numeric(5,2),
storage_total bigint,
storage_used bigint,
storage_available bigint,
storage_usage_percent numeric(5,2),
network_bytes_in bigint,
network_bytes_out bigint,
network_packets_in bigint,
network_packets_out bigint,
network_connections_in integer,
network_connections_out integer,
network_errors_in bigint,
network_errors_out bigint,
uptime interval,
processes integer,
os character varying(50),
kernel character varying(50),
architecture character varying(20),
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: node_metrics_summary; Type: VIEW; Schema: public; Owner: -
--
CREATE OR REPLACE VIEW public.node_metrics_summary AS
SELECT node_metrics.node_id,
node_metrics."timestamp",
node_metrics.cpu_usage,
node_metrics.memory_usage_percent,
node_metrics.storage_usage_percent,
(node_metrics.network_bytes_in + node_metrics.network_bytes_out) AS total_network_bytes,
node_metrics.load_avg_1,
node_metrics.uptime
FROM public.node_metrics
ORDER BY node_metrics."timestamp" DESC;
--
-- Name: preview_environments; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.preview_environments (
id uuid DEFAULT gen_random_uuid() NOT NULL,
project_id uuid NOT NULL,
service_id uuid NOT NULL,
branch_name character varying(255) NOT NULL,
pr_number integer,
environment character varying(255) NOT NULL,
status character varying(50) DEFAULT 'building'::character varying NOT NULL,
url text,
expires_at timestamp with time zone NOT NULL,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT preview_environments_status_check CHECK (((status)::text = ANY ((ARRAY['building'::character varying, 'running'::character varying, 'failed'::character varying, 'stopped'::character varying, 'expired'::character varying])::text[])))
);
--
-- Name: TABLE preview_environments; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.preview_environments IS 'Preview environments for branch-based deployments';
--
-- Name: COLUMN preview_environments.id; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.id IS 'Unique identifier for the preview environment';
--
-- Name: COLUMN preview_environments.project_id; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.project_id IS 'Reference to the project';
--
-- Name: COLUMN preview_environments.service_id; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.service_id IS 'Reference to the service';
--
-- Name: COLUMN preview_environments.branch_name; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.branch_name IS 'Git branch name';
--
-- Name: COLUMN preview_environments.pr_number; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.pr_number IS 'Pull request number (optional)';
--
-- Name: COLUMN preview_environments.environment; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.environment IS 'Environment name (e.g., preview-feature-branch-20240101-120000)';
--
-- Name: COLUMN preview_environments.status; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.status IS 'Current status of the preview environment';
--
-- Name: COLUMN preview_environments.url; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.url IS 'URL where the preview environment is accessible';
--
-- Name: COLUMN preview_environments.expires_at; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.expires_at IS 'When the preview environment expires';
--
-- Name: COLUMN preview_environments.created_at; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.created_at IS 'When the preview environment was created';
--
-- Name: COLUMN preview_environments.updated_at; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON COLUMN public.preview_environments.updated_at IS 'When the preview environment was last updated';
--
-- Name: project_members; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.project_members (
id uuid DEFAULT gen_random_uuid() NOT NULL,
project_id uuid NOT NULL,
user_id uuid NOT NULL,
role character varying(50) DEFAULT 'developer'::character varying NOT NULL,
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: projects; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.projects (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(255) NOT NULL,
description text,
owner_id uuid NOT NULL,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: services; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.services (
id uuid DEFAULT gen_random_uuid() NOT NULL,
name character varying(255) NOT NULL,
description text,
project_id uuid NOT NULL,
environment_id uuid NOT NULL,
service_type character varying(50) NOT NULL,
source_type character varying(50) NOT NULL,
source_url character varying(500),
image_name character varying(500),
build_command text,
start_command text,
cpu_limit integer,
memory_limit integer,
public_url character varying(500),
health_check_url character varying(500),
status character varying(50) DEFAULT 'created'::character varying,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
type character varying(50),
image character varying(500),
command text,
environment character varying(50),
git_repo character varying(500),
git_branch character varying(100),
build_path character varying(500),
cpu character varying(50),
memory character varying(50)
);
--
-- Name: project_stats; Type: VIEW; Schema: public; Owner: -
--
CREATE OR REPLACE VIEW public.project_stats AS
SELECT p.id,
p.name,
p.description,
p.owner_id,
p.created_at,
p.updated_at,
count(DISTINCT s.id) AS service_count,
count(DISTINCT d.id) AS deployment_count,
count(DISTINCT
CASE
WHEN ((s.status)::text = 'running'::text) THEN s.id
ELSE NULL::uuid
END) AS running_services,
max(d.created_at) AS last_deployment
FROM ((public.projects p
LEFT JOIN public.services s ON ((p.id = s.project_id)))
LEFT JOIN public.deployments d ON ((s.id = d.service_id)))
GROUP BY p.id, p.name, p.description, p.owner_id, p.created_at, p.updated_at;
--
-- Name: VIEW project_stats; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON VIEW public.project_stats IS 'Aggregated project-level statistics for dashboards';
--
-- Name: scheduling_rules; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.scheduling_rules (
id character varying(255) NOT NULL,
cluster_id character varying(255) NOT NULL,
name character varying(255) NOT NULL,
type character varying(50) NOT NULL,
selector jsonb,
weight integer DEFAULT 1,
enabled boolean DEFAULT true,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: TABLE scheduling_rules; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.scheduling_rules IS 'Rules for scheduling containers on agents';
--
-- Name: security_scans; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.security_scans (
id uuid DEFAULT gen_random_uuid() NOT NULL,
project_id uuid NOT NULL,
service_id uuid,
scan_type character varying(50) NOT NULL,
status character varying(50) DEFAULT 'running'::character varying NOT NULL,
started_at timestamp with time zone DEFAULT now() NOT NULL,
completed_at timestamp with time zone,
summary jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT security_scans_scan_type_check CHECK (((scan_type)::text = ANY ((ARRAY['dependency'::character varying, 'configuration'::character varying, 'comprehensive'::character varying])::text[]))),
CONSTRAINT security_scans_status_check CHECK (((status)::text = ANY ((ARRAY['running'::character varying, 'completed'::character varying, 'failed'::character varying])::text[])))
);
--
-- Name: TABLE security_scans; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.security_scans IS 'Security scan records for vulnerability assessment';
--
-- Name: service_dependencies; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.service_dependencies (
id uuid DEFAULT gen_random_uuid() NOT NULL,
service_id uuid NOT NULL,
depends_on_service_id uuid NOT NULL,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT service_dependencies_check CHECK ((service_id <> depends_on_service_id))
);
--
-- Name: service_discovery; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.service_discovery (
id uuid DEFAULT gen_random_uuid() NOT NULL,
service_id character varying(255) NOT NULL,
service_name character varying(255) NOT NULL,
project_id character varying(255) NOT NULL,
instance_id character varying(255) NOT NULL,
node_id character varying(255),
ip_address inet NOT NULL,
port integer,
status character varying(50) DEFAULT 'unknown'::character varying,
health_status character varying(20) DEFAULT 'unknown'::character varying,
labels jsonb DEFAULT '{}'::jsonb,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
last_seen timestamp with time zone DEFAULT now()
);
--
-- Name: service_metrics; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.service_metrics (
service_id character varying(255) NOT NULL,
service_name character varying(255) NOT NULL,
project_id character varying(255) NOT NULL,
"timestamp" timestamp with time zone NOT NULL,
requests_total bigint DEFAULT 0,
requests_success bigint DEFAULT 0,
requests_errors bigint DEFAULT 0,
requests_avg_latency numeric(10,3),
requests_p95_latency numeric(10,3),
requests_p99_latency numeric(10,3),
requests_throughput numeric(10,3),
errors_total bigint DEFAULT 0,
errors_rate numeric(5,4),
performance_response_time numeric(10,3),
performance_throughput numeric(10,3),
performance_concurrency bigint,
performance_saturation numeric(5,2),
performance_utilization numeric(5,2),
resource_cpu_usage numeric(5,2),
resource_memory_usage bigint,
resource_storage_usage bigint,
resource_network_usage bigint,
resource_score numeric(5,2),
created_at timestamp with time zone DEFAULT now()
);
--
-- Name: service_metrics_summary; Type: VIEW; Schema: public; Owner: -
--
CREATE OR REPLACE VIEW public.service_metrics_summary AS
SELECT service_metrics.service_id,
service_metrics.service_name,
service_metrics.project_id,
service_metrics."timestamp",
service_metrics.requests_total,
service_metrics.requests_success,
service_metrics.requests_errors,
CASE
WHEN (service_metrics.requests_total > 0) THEN ((service_metrics.requests_errors)::numeric / (service_metrics.requests_total)::numeric)
ELSE (0)::numeric
END AS error_rate,
service_metrics.requests_avg_latency,
service_metrics.requests_p95_latency,
service_metrics.requests_throughput,
service_metrics.resource_cpu_usage,
service_metrics.resource_memory_usage
FROM public.service_metrics
ORDER BY service_metrics."timestamp" DESC;
--
-- Name: service_templates; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.service_templates (
id character varying(50) NOT NULL,
name character varying(255) NOT NULL,
description text,
category character varying(50) NOT NULL,
logo character varying(500),
config jsonb NOT NULL,
variables jsonb DEFAULT '[]'::jsonb,
is_official boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: usage_counters; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.usage_counters (
id integer NOT NULL,
api_key_id uuid NOT NULL,
service_id uuid NOT NULL,
period_month text NOT NULL,
request_count integer DEFAULT 0 NOT NULL,
updated_at timestamp without time zone DEFAULT now() NOT NULL
);
--
-- Name: usage_counters_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS public.usage_counters_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: usage_counters_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.usage_counters_id_seq OWNED BY public.usage_counters.id;
--
-- Name: users; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.users (
id uuid DEFAULT gen_random_uuid() NOT NULL,
email character varying(255) NOT NULL,
password_hash character varying(255) NOT NULL,
name character varying(255) NOT NULL,
avatar_url character varying(500),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
--
-- Name: vulnerabilities; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE IF NOT EXISTS public.vulnerabilities (
id uuid DEFAULT gen_random_uuid() NOT NULL,
type character varying(50) NOT NULL,
severity character varying(20) NOT NULL,
title character varying(255) NOT NULL,
description text,
service_id uuid,
project_id uuid NOT NULL,
status character varying(50) DEFAULT 'open'::character varying NOT NULL,
found_at timestamp with time zone DEFAULT now() NOT NULL,
resolved_at timestamp with time zone,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT vulnerabilities_severity_check CHECK (((severity)::text = ANY ((ARRAY['critical'::character varying, 'high'::character varying, 'medium'::character varying, 'low'::character varying])::text[]))),
CONSTRAINT vulnerabilities_status_check CHECK (((status)::text = ANY ((ARRAY['open'::character varying, 'resolved'::character varying, 'ignored'::character varying])::text[]))),
CONSTRAINT vulnerabilities_type_check CHECK (((type)::text = ANY ((ARRAY['dependency'::character varying, 'configuration'::character varying, 'code'::character varying])::text[])))
);
--
-- Name: TABLE vulnerabilities; Type: COMMENT; Schema: public; Owner: -
--
COMMENT ON TABLE public.vulnerabilities IS 'Security vulnerabilities found during scans';
--
-- Name: container_metrics id; Type: DEFAULT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'agent_commands_pkey') THEN
ALTER TABLE ONLY public.container_metrics ALTER COLUMN id SET DEFAULT nextval('public.container_metrics_id_seq'::regclass);
--
-- Name: database_metrics id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.database_metrics ALTER COLUMN id SET DEFAULT nextval('public.database_metrics_id_seq'::regclass);
--
-- Name: incident_events id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.incident_events ALTER COLUMN id SET DEFAULT nextval('public.incident_events_id_seq'::regclass);
--
-- Name: metrics_timeseries id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.metrics_timeseries ALTER COLUMN id SET DEFAULT nextval('public.metrics_timeseries_id_seq'::regclass);
--
-- Name: usage_counters id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.usage_counters ALTER COLUMN id SET DEFAULT nextval('public.usage_counters_id_seq'::regclass);
--
-- Name: agent_commands agent_commands_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.agent_commands
ADD CONSTRAINT agent_commands_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: agent_heartbeats agent_heartbeats_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'agent_heartbeats_pkey') THEN
ALTER TABLE ONLY public.agent_heartbeats
ADD CONSTRAINT agent_heartbeats_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: alert_incidents alert_incidents_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'alert_incidents_pkey') THEN
ALTER TABLE ONLY public.alert_incidents
ADD CONSTRAINT alert_incidents_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: alert_rules alert_rules_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'alert_rules_pkey') THEN
ALTER TABLE ONLY public.alert_rules
ADD CONSTRAINT alert_rules_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: anonymized_data anonymized_data_anonymized_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'anonymized_data_anonymized_id_key') THEN
ALTER TABLE ONLY public.anonymized_data
ADD CONSTRAINT anonymized_data_anonymized_id_key UNIQUE (anonymized_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: anonymized_data anonymized_data_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'anonymized_data_pkey') THEN
ALTER TABLE ONLY public.anonymized_data
ADD CONSTRAINT anonymized_data_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: api_keys api_keys_key_hash_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'api_keys_key_hash_key') THEN
ALTER TABLE ONLY public.api_keys
ADD CONSTRAINT api_keys_key_hash_key UNIQUE (key_hash);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: api_keys api_keys_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'api_keys_pkey') THEN
ALTER TABLE ONLY public.api_keys
ADD CONSTRAINT api_keys_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: api_services api_services_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'api_services_pkey') THEN
ALTER TABLE ONLY public.api_services
ADD CONSTRAINT api_services_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: api_services api_services_route_prefix_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'api_services_route_prefix_key') THEN
ALTER TABLE ONLY public.api_services
ADD CONSTRAINT api_services_route_prefix_key UNIQUE (route_prefix);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: api_services api_services_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'api_services_slug_key') THEN
ALTER TABLE ONLY public.api_services
ADD CONSTRAINT api_services_slug_key UNIQUE (slug);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: audit_logs audit_logs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_logs_pkey') THEN
ALTER TABLE ONLY public.audit_logs
ADD CONSTRAINT audit_logs_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: builds builds_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'builds_pkey') THEN
ALTER TABLE ONLY public.builds
ADD CONSTRAINT builds_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cluster_agents cluster_agents_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cluster_agents_pkey') THEN
ALTER TABLE ONLY public.cluster_agents
ADD CONSTRAINT cluster_agents_pkey PRIMARY KEY (cluster_id, agent_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_controls compliance_controls_framework_id_code_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_controls_framework_id_code_key') THEN
ALTER TABLE ONLY public.compliance_controls
ADD CONSTRAINT compliance_controls_framework_id_code_key UNIQUE (framework_id, code);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_controls compliance_controls_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_controls_pkey') THEN
ALTER TABLE ONLY public.compliance_controls
ADD CONSTRAINT compliance_controls_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_frameworks compliance_frameworks_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_frameworks_name_key') THEN
ALTER TABLE ONLY public.compliance_frameworks
ADD CONSTRAINT compliance_frameworks_name_key UNIQUE (name);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_frameworks compliance_frameworks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_frameworks_pkey') THEN
ALTER TABLE ONLY public.compliance_frameworks
ADD CONSTRAINT compliance_frameworks_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_reports compliance_reports_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_reports_pkey') THEN
ALTER TABLE ONLY public.compliance_reports
ADD CONSTRAINT compliance_reports_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_risks compliance_risks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_risks_pkey') THEN
ALTER TABLE ONLY public.compliance_risks
ADD CONSTRAINT compliance_risks_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: container_instances container_instances_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'container_instances_pkey') THEN
ALTER TABLE ONLY public.container_instances
ADD CONSTRAINT container_instances_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: container_metrics container_metrics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'container_metrics_pkey') THEN
ALTER TABLE ONLY public.container_metrics
ADD CONSTRAINT container_metrics_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cron_executions cron_executions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cron_executions_pkey') THEN
ALTER TABLE ONLY public.cron_executions
ADD CONSTRAINT cron_executions_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cron_jobs cron_jobs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cron_jobs_pkey') THEN
ALTER TABLE ONLY public.cron_jobs
ADD CONSTRAINT cron_jobs_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: data_retention_policies data_retention_policies_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'data_retention_policies_name_key') THEN
ALTER TABLE ONLY public.data_retention_policies
ADD CONSTRAINT data_retention_policies_name_key UNIQUE (name);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: data_retention_policies data_retention_policies_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'data_retention_policies_pkey') THEN
ALTER TABLE ONLY public.data_retention_policies
ADD CONSTRAINT data_retention_policies_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_backups database_backups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'database_backups_pkey') THEN
ALTER TABLE ONLY public.database_backups
ADD CONSTRAINT database_backups_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_metrics database_metrics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'database_metrics_pkey') THEN
ALTER TABLE ONLY public.database_metrics
ADD CONSTRAINT database_metrics_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_services database_services_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'database_services_pkey') THEN
ALTER TABLE ONLY public.database_services
ADD CONSTRAINT database_services_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_settings database_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'database_settings_pkey') THEN
ALTER TABLE ONLY public.database_settings
ADD CONSTRAINT database_settings_pkey PRIMARY KEY (database_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: deployments deployments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'deployments_pkey') THEN
ALTER TABLE ONLY public.deployments
ADD CONSTRAINT deployments_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: dns_records dns_records_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'dns_records_pkey') THEN
ALTER TABLE ONLY public.dns_records
ADD CONSTRAINT dns_records_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: environment_variables environment_variables_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'environment_variables_pkey') THEN
ALTER TABLE ONLY public.environment_variables
ADD CONSTRAINT environment_variables_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: environment_variables environment_variables_service_id_key_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'environment_variables_service_id_key_key') THEN
ALTER TABLE ONLY public.environment_variables
ADD CONSTRAINT environment_variables_service_id_key_key UNIQUE (service_id, key);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: environments environments_name_project_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'environments_name_project_id_key') THEN
ALTER TABLE ONLY public.environments
ADD CONSTRAINT environments_name_project_id_key UNIQUE (name, project_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: environments environments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'environments_pkey') THEN
ALTER TABLE ONLY public.environments
ADD CONSTRAINT environments_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_branches git_branches_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_branches_pkey') THEN
ALTER TABLE ONLY public.git_branches
ADD CONSTRAINT git_branches_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_branches git_branches_repo_id_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_branches_repo_id_name_key') THEN
ALTER TABLE ONLY public.git_branches
ADD CONSTRAINT git_branches_repo_id_name_key UNIQUE (repo_id, name);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_deployment_triggers git_deployment_triggers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_deployment_triggers_pkey') THEN
ALTER TABLE ONLY public.git_deployment_triggers
ADD CONSTRAINT git_deployment_triggers_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_deployment_triggers git_deployment_triggers_webhook_id_service_id_branch_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_deployment_triggers_webhook_id_service_id_branch_key') THEN
ALTER TABLE ONLY public.git_deployment_triggers
ADD CONSTRAINT git_deployment_triggers_webhook_id_service_id_branch_key UNIQUE (webhook_id, service_id, branch);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_providers git_providers_name_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_providers_name_user_id_key') THEN
ALTER TABLE ONLY public.git_providers
ADD CONSTRAINT git_providers_name_user_id_key UNIQUE (name, user_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_providers git_providers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_providers_pkey') THEN
ALTER TABLE ONLY public.git_providers
ADD CONSTRAINT git_providers_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_repositories git_repositories_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_repositories_pkey') THEN
ALTER TABLE ONLY public.git_repositories
ADD CONSTRAINT git_repositories_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_repositories git_repositories_provider_id_full_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_repositories_provider_id_full_name_key') THEN
ALTER TABLE ONLY public.git_repositories
ADD CONSTRAINT git_repositories_provider_id_full_name_key UNIQUE (provider_id, full_name);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_webhooks git_webhooks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_webhooks_pkey') THEN
ALTER TABLE ONLY public.git_webhooks
ADD CONSTRAINT git_webhooks_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_webhooks git_webhooks_repo_id_provider_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_webhooks_repo_id_provider_id_key') THEN
ALTER TABLE ONLY public.git_webhooks
ADD CONSTRAINT git_webhooks_repo_id_provider_id_key UNIQUE (repo_id, provider_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: incident_events incident_events_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'incident_events_pkey') THEN
ALTER TABLE ONLY public.incident_events
ADD CONSTRAINT incident_events_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: instance_metrics instance_metrics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'instance_metrics_pkey') THEN
ALTER TABLE ONLY public.instance_metrics
ADD CONSTRAINT instance_metrics_pkey PRIMARY KEY (service_id, "timestamp", instance_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: metrics_aggregation_rules metrics_aggregation_rules_name_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'metrics_aggregation_rules_name_key') THEN
ALTER TABLE ONLY public.metrics_aggregation_rules
ADD CONSTRAINT metrics_aggregation_rules_name_key UNIQUE (name);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: metrics_aggregation_rules metrics_aggregation_rules_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'metrics_aggregation_rules_pkey') THEN
ALTER TABLE ONLY public.metrics_aggregation_rules
ADD CONSTRAINT metrics_aggregation_rules_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: metrics_timeseries metrics_timeseries_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'metrics_timeseries_pkey') THEN
ALTER TABLE ONLY public.metrics_timeseries
ADD CONSTRAINT metrics_timeseries_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: node_agents node_agents_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'node_agents_pkey') THEN
ALTER TABLE ONLY public.node_agents
ADD CONSTRAINT node_agents_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: node_clusters node_clusters_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'node_clusters_pkey') THEN
ALTER TABLE ONLY public.node_clusters
ADD CONSTRAINT node_clusters_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: node_metrics node_metrics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'node_metrics_pkey') THEN
ALTER TABLE ONLY public.node_metrics
ADD CONSTRAINT node_metrics_pkey PRIMARY KEY (node_id, "timestamp");
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: preview_environments preview_environments_environment_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'preview_environments_environment_key') THEN
ALTER TABLE ONLY public.preview_environments
ADD CONSTRAINT preview_environments_environment_key UNIQUE (environment);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: preview_environments preview_environments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'preview_environments_pkey') THEN
ALTER TABLE ONLY public.preview_environments
ADD CONSTRAINT preview_environments_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: project_members project_members_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'project_members_pkey') THEN
ALTER TABLE ONLY public.project_members
ADD CONSTRAINT project_members_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: project_members project_members_project_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'project_members_project_id_user_id_key') THEN
ALTER TABLE ONLY public.project_members
ADD CONSTRAINT project_members_project_id_user_id_key UNIQUE (project_id, user_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: projects projects_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'projects_pkey') THEN
ALTER TABLE ONLY public.projects
ADD CONSTRAINT projects_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: scheduling_rules scheduling_rules_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'scheduling_rules_pkey') THEN
ALTER TABLE ONLY public.scheduling_rules
ADD CONSTRAINT scheduling_rules_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: security_scans security_scans_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'security_scans_pkey') THEN
ALTER TABLE ONLY public.security_scans
ADD CONSTRAINT security_scans_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_dependencies service_dependencies_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_dependencies_pkey') THEN
ALTER TABLE ONLY public.service_dependencies
ADD CONSTRAINT service_dependencies_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_dependencies service_dependencies_service_id_depends_on_service_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_dependencies_service_id_depends_on_service_id_key') THEN
ALTER TABLE ONLY public.service_dependencies
ADD CONSTRAINT service_dependencies_service_id_depends_on_service_id_key UNIQUE (service_id, depends_on_service_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_discovery service_discovery_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_discovery_pkey') THEN
ALTER TABLE ONLY public.service_discovery
ADD CONSTRAINT service_discovery_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_discovery service_discovery_service_id_instance_id_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_discovery_service_id_instance_id_key') THEN
ALTER TABLE ONLY public.service_discovery
ADD CONSTRAINT service_discovery_service_id_instance_id_key UNIQUE (service_id, instance_id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_metrics service_metrics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_metrics_pkey') THEN
ALTER TABLE ONLY public.service_metrics
ADD CONSTRAINT service_metrics_pkey PRIMARY KEY (service_id, "timestamp");
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_templates service_templates_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_templates_pkey') THEN
ALTER TABLE ONLY public.service_templates
ADD CONSTRAINT service_templates_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: services services_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'services_pkey') THEN
ALTER TABLE ONLY public.services
ADD CONSTRAINT services_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: usage_counters usage_counters_api_key_id_service_id_period_month_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'usage_counters_api_key_id_service_id_period_month_key') THEN
ALTER TABLE ONLY public.usage_counters
ADD CONSTRAINT usage_counters_api_key_id_service_id_period_month_key UNIQUE (api_key_id, service_id, period_month);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: usage_counters usage_counters_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'usage_counters_pkey') THEN
ALTER TABLE ONLY public.usage_counters
ADD CONSTRAINT usage_counters_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'users_email_key') THEN
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_email_key UNIQUE (email);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'users_pkey') THEN
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: vulnerabilities vulnerabilities_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'vulnerabilities_pkey') THEN
ALTER TABLE ONLY public.vulnerabilities
ADD CONSTRAINT vulnerabilities_pkey PRIMARY KEY (id);
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: idx_active_deployments; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_active_deployments ON public.deployments USING btree (service_id, created_at DESC) WHERE ((status)::text = ANY ((ARRAY['running'::character varying, 'deploying'::character varying])::text[]));
--
-- Name: idx_agent_commands_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_agent_commands_created_at ON public.agent_commands USING btree (created_at);
--
-- Name: idx_agent_commands_node_agent_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_agent_commands_node_agent_id ON public.agent_commands USING btree (node_agent_id);
--
-- Name: idx_agent_commands_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_agent_commands_status ON public.agent_commands USING btree (status);
--
-- Name: idx_agent_commands_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_agent_commands_type ON public.agent_commands USING btree (type);
--
-- Name: idx_agent_heartbeats_node_agent_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_agent_heartbeats_node_agent_id ON public.agent_heartbeats USING btree (node_agent_id);
--
-- Name: idx_agent_heartbeats_node_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_agent_heartbeats_node_timestamp ON public.agent_heartbeats USING btree (node_agent_id, "timestamp" DESC);
--
-- Name: idx_agent_heartbeats_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_agent_heartbeats_timestamp ON public.agent_heartbeats USING btree ("timestamp");
--
-- Name: idx_alert_incidents_rule; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_alert_incidents_rule ON public.alert_incidents USING btree (rule_id);
--
-- Name: idx_alert_incidents_started; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_alert_incidents_started ON public.alert_incidents USING btree (started_at DESC);
--
-- Name: idx_alert_incidents_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_alert_incidents_status ON public.alert_incidents USING btree (status);
--
-- Name: idx_alert_rules_enabled; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_alert_rules_enabled ON public.alert_rules USING btree (enabled);
--
-- Name: idx_alert_rules_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_alert_rules_type ON public.alert_rules USING btree (metric_type);
--
-- Name: idx_anonymized_data_anonymized_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_anonymized_data_anonymized_id ON public.anonymized_data USING btree (anonymized_id);
--
-- Name: idx_anonymized_data_data_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_anonymized_data_data_type ON public.anonymized_data USING btree (data_type);
--
-- Name: idx_anonymized_data_original_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_anonymized_data_original_id ON public.anonymized_data USING btree (original_id);
--
-- Name: idx_api_keys_enabled; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_api_keys_enabled ON public.api_keys USING btree (enabled);
--
-- Name: idx_api_keys_hash; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_api_keys_hash ON public.api_keys USING btree (key_hash);
--
-- Name: idx_api_keys_prefix; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_api_keys_prefix ON public.api_keys USING btree (key_prefix);
--
-- Name: idx_audit_logs_action; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_audit_logs_action ON public.audit_logs USING btree (action);
--
-- Name: idx_audit_logs_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON public.audit_logs USING btree (created_at);
--
-- Name: idx_audit_logs_resource; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_audit_logs_resource ON public.audit_logs USING btree (resource);
--
-- Name: idx_audit_logs_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_audit_logs_timestamp ON public.audit_logs USING btree ("timestamp");
--
-- Name: idx_audit_logs_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_audit_logs_user_id ON public.audit_logs USING btree (user_id);
--
-- Name: idx_builds_created_at_desc; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_builds_created_at_desc ON public.builds USING btree (created_at DESC);
--
-- Name: idx_builds_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_builds_project_id ON public.builds USING btree (project_id);
--
-- Name: idx_builds_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_builds_service_id ON public.builds USING btree (service_id);
--
-- Name: idx_builds_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_builds_status ON public.builds USING btree (status);
--
-- Name: idx_compliance_controls_framework_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_controls_framework_id ON public.compliance_controls USING btree (framework_id);
--
-- Name: idx_compliance_controls_last_assessed; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_controls_last_assessed ON public.compliance_controls USING btree (last_assessed);
--
-- Name: idx_compliance_controls_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_controls_status ON public.compliance_controls USING btree (status);
--
-- Name: idx_compliance_reports_assessment_date; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_reports_assessment_date ON public.compliance_reports USING btree (assessment_date);
--
-- Name: idx_compliance_reports_framework_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_reports_framework_id ON public.compliance_reports USING btree (framework_id);
--
-- Name: idx_compliance_reports_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_reports_project_id ON public.compliance_reports USING btree (project_id);
--
-- Name: idx_compliance_risks_control_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_risks_control_id ON public.compliance_risks USING btree (control_id);
--
-- Name: idx_compliance_risks_report_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_compliance_risks_report_id ON public.compliance_risks USING btree (report_id);
--
-- Name: idx_container_instances_node_agent_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_container_instances_node_agent_id ON public.container_instances USING btree (node_agent_id);
--
-- Name: idx_container_instances_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_container_instances_project_id ON public.container_instances USING btree (project_id);
--
-- Name: idx_container_instances_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_container_instances_service_id ON public.container_instances USING btree (service_id);
--
-- Name: idx_container_instances_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_container_instances_status ON public.container_instances USING gin (status);
--
-- Name: idx_container_metrics_container_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_container_metrics_container_id ON public.container_metrics USING btree (container_id);
--
-- Name: idx_container_metrics_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_container_metrics_timestamp ON public.container_metrics USING btree ("timestamp");
--
-- Name: idx_cron_executions_job_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_cron_executions_job_id ON public.cron_executions USING btree (cron_job_id);
--
-- Name: idx_cron_jobs_next_run; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_cron_jobs_next_run ON public.cron_jobs USING btree (next_run_at) WHERE (enabled = true);
--
-- Name: idx_cron_jobs_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_cron_jobs_project_id ON public.cron_jobs USING btree (project_id);
--
-- Name: idx_cron_jobs_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_cron_jobs_service_id ON public.cron_jobs USING btree (service_id);
--
-- Name: idx_database_backups_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_backups_created_at ON public.database_backups USING btree (created_at);
--
-- Name: idx_database_backups_database_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_backups_database_id ON public.database_backups USING btree (database_id);
--
-- Name: idx_database_backups_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_backups_status ON public.database_backups USING btree (status);
--
-- Name: idx_database_metrics_database_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_metrics_database_id ON public.database_metrics USING btree (database_id);
--
-- Name: idx_database_metrics_recorded_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_metrics_recorded_at ON public.database_metrics USING btree (recorded_at);
--
-- Name: idx_database_services_created_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_services_created_at ON public.database_services USING btree (created_at);
--
-- Name: idx_database_services_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_services_status ON public.database_services USING btree (status);
--
-- Name: idx_database_services_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_services_type ON public.database_services USING btree (type);
--
-- Name: idx_database_services_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_database_services_user_id ON public.database_services USING btree (user_id);
--
-- Name: idx_deployments_image_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_deployments_image_name ON public.deployments USING btree (image_name);
--
-- Name: idx_deployments_service_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_deployments_service_created ON public.deployments USING btree (service_id, created_at DESC);
--
-- Name: idx_deployments_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_deployments_service_id ON public.deployments USING btree (service_id);
--
-- Name: idx_deployments_service_status_created; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_deployments_service_status_created ON public.deployments USING btree (service_id, status, created_at DESC);
--
-- Name: idx_deployments_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_deployments_status ON public.deployments USING btree (status);
--
-- Name: idx_dns_records_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_dns_records_name ON public.dns_records USING btree (name);
--
-- Name: idx_dns_records_service; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_dns_records_service ON public.dns_records USING btree (service_id);
--
-- Name: idx_dns_records_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_dns_records_type ON public.dns_records USING btree (type);
--
-- Name: idx_env_vars_service_key; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_env_vars_service_key ON public.environment_variables USING btree (service_id, key);
--
-- Name: idx_environment_variables_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_environment_variables_service_id ON public.environment_variables USING btree (service_id);
--
-- Name: idx_git_branches_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_branches_name ON public.git_branches USING btree (name);
--
-- Name: idx_git_branches_repo_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_branches_repo_id ON public.git_branches USING btree (repo_id);
--
-- Name: idx_git_deployment_triggers_branch; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_deployment_triggers_branch ON public.git_deployment_triggers USING btree (branch);
--
-- Name: idx_git_deployment_triggers_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_deployment_triggers_service_id ON public.git_deployment_triggers USING btree (service_id);
--
-- Name: idx_git_deployment_triggers_webhook_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_deployment_triggers_webhook_id ON public.git_deployment_triggers USING btree (webhook_id);
--
-- Name: idx_git_providers_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_providers_name ON public.git_providers USING btree (name);
--
-- Name: idx_git_providers_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_providers_user_id ON public.git_providers USING btree (user_id);
--
-- Name: idx_git_repositories_full_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_repositories_full_name ON public.git_repositories USING btree (full_name);
--
-- Name: idx_git_repositories_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_repositories_provider_id ON public.git_repositories USING btree (provider_id);
--
-- Name: idx_git_repositories_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_repositories_user_id ON public.git_repositories USING btree (user_id);
--
-- Name: idx_git_webhooks_active; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_webhooks_active ON public.git_webhooks USING btree (active);
--
-- Name: idx_git_webhooks_provider_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_webhooks_provider_id ON public.git_webhooks USING btree (provider_id);
--
-- Name: idx_git_webhooks_repo_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_git_webhooks_repo_id ON public.git_webhooks USING btree (repo_id);
--
-- Name: idx_incident_events_key; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_incident_events_key ON public.incident_events USING btree (api_key_id);
--
-- Name: idx_incident_events_occurred; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_incident_events_occurred ON public.incident_events USING btree (occurred_at);
--
-- Name: idx_incident_events_service; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_incident_events_service ON public.incident_events USING btree (service_id);
--
-- Name: idx_metrics_aggregation_rules_type; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_metrics_aggregation_rules_type ON public.metrics_aggregation_rules USING btree (metric_type);
--
-- Name: idx_metrics_timeseries_metric; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_metrics_timeseries_metric ON public.metrics_timeseries USING btree (metric);
--
-- Name: idx_metrics_timeseries_occurred; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_metrics_timeseries_occurred ON public.metrics_timeseries USING btree (occurred_at);
--
-- Name: idx_node_agents_hostname; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_node_agents_hostname ON public.node_agents USING btree (hostname);
--
-- Name: idx_node_agents_ip_address; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_node_agents_ip_address ON public.node_agents USING btree (ip_address);
--
-- Name: idx_node_agents_last_heartbeat; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_node_agents_last_heartbeat ON public.node_agents USING btree (last_heartbeat);
--
-- Name: idx_node_agents_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_node_agents_status ON public.node_agents USING btree (status);
--
-- Name: idx_node_metrics_node_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_node_metrics_node_timestamp ON public.node_metrics USING btree (node_id, "timestamp" DESC);
--
-- Name: idx_node_metrics_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_node_metrics_timestamp ON public.node_metrics USING btree ("timestamp" DESC);
--
-- Name: idx_preview_environments_branch_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_preview_environments_branch_name ON public.preview_environments USING btree (branch_name);
--
-- Name: idx_preview_environments_expires_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_preview_environments_expires_at ON public.preview_environments USING btree (expires_at);
--
-- Name: idx_preview_environments_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_preview_environments_project_id ON public.preview_environments USING btree (project_id);
--
-- Name: idx_preview_environments_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_preview_environments_service_id ON public.preview_environments USING btree (service_id);
--
-- Name: idx_preview_environments_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_preview_environments_status ON public.preview_environments USING btree (status);
--
-- Name: idx_preview_environments_unique_active; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX IF NOT EXISTS idx_preview_environments_unique_active ON public.preview_environments USING btree (service_id, branch_name) WHERE ((status)::text <> ALL ((ARRAY['expired'::character varying, 'stopped'::character varying])::text[]));
--
-- Name: idx_project_members_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_project_members_project_id ON public.project_members USING btree (project_id);
--
-- Name: idx_project_members_role; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_project_members_role ON public.project_members USING btree (project_id, role);
--
-- Name: idx_project_members_user_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_project_members_user_id ON public.project_members USING btree (user_id);
--
-- Name: idx_projects_owner_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_projects_owner_id ON public.projects USING btree (owner_id);
--
-- Name: idx_projects_owner_updated; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_projects_owner_updated ON public.projects USING btree (owner_id, updated_at DESC);
--
-- Name: idx_running_services; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_running_services ON public.services USING btree (project_id, updated_at DESC) WHERE ((status)::text = 'running'::text);
--
-- Name: idx_security_scans_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_security_scans_project_id ON public.security_scans USING btree (project_id);
--
-- Name: idx_security_scans_started_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_security_scans_started_at ON public.security_scans USING btree (started_at);
--
-- Name: idx_security_scans_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_security_scans_status ON public.security_scans USING btree (status);
--
-- Name: idx_service_deps_depends_on; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_deps_depends_on ON public.service_dependencies USING btree (depends_on_service_id);
--
-- Name: idx_service_deps_service; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_deps_service ON public.service_dependencies USING btree (service_id);
--
-- Name: idx_service_discovery_ip; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_discovery_ip ON public.service_discovery USING btree (ip_address);
--
-- Name: idx_service_discovery_labels; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_discovery_labels ON public.service_discovery USING gin (labels);
--
-- Name: idx_service_discovery_name; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_discovery_name ON public.service_discovery USING btree (service_name);
--
-- Name: idx_service_discovery_project; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_discovery_project ON public.service_discovery USING btree (project_id);
--
-- Name: idx_service_discovery_service; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_discovery_service ON public.service_discovery USING btree (service_id);
--
-- Name: idx_service_discovery_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_discovery_status ON public.service_discovery USING btree (status);
--
-- Name: idx_service_metrics_project_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_metrics_project_timestamp ON public.service_metrics USING btree (project_id, "timestamp" DESC);
--
-- Name: idx_service_metrics_service_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_metrics_service_timestamp ON public.service_metrics USING btree (service_id, "timestamp" DESC);
--
-- Name: idx_service_metrics_timestamp; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_metrics_timestamp ON public.service_metrics USING btree ("timestamp" DESC);
--
-- Name: idx_service_templates_category; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_service_templates_category ON public.service_templates USING btree (category);
--
-- Name: idx_services_environment_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_services_environment_id ON public.services USING btree (environment_id);
--
-- Name: idx_services_project_env; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_services_project_env ON public.services USING btree (project_id, environment_id);
--
-- Name: idx_services_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_services_project_id ON public.services USING btree (project_id);
--
-- Name: idx_services_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_services_status ON public.services USING btree (status);
--
-- Name: idx_services_status_project; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_services_status_project ON public.services USING btree (status, project_id);
--
-- Name: idx_usage_counters_key_service_month; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_usage_counters_key_service_month ON public.usage_counters USING btree (api_key_id, service_id, period_month);
--
-- Name: idx_users_email; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_users_email ON public.users USING btree (email);
--
-- Name: idx_vulnerabilities_found_at; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_vulnerabilities_found_at ON public.vulnerabilities USING btree (found_at);
--
-- Name: idx_vulnerabilities_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_vulnerabilities_project_id ON public.vulnerabilities USING btree (project_id);
--
-- Name: idx_vulnerabilities_service_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_vulnerabilities_service_id ON public.vulnerabilities USING btree (service_id);
--
-- Name: idx_vulnerabilities_severity; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_vulnerabilities_severity ON public.vulnerabilities USING btree (severity);
--
-- Name: idx_vulnerabilities_status; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX IF NOT EXISTS idx_vulnerabilities_status ON public.vulnerabilities USING btree (status);
--
-- Name: preview_environments preview_environments_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'preview_environments_updated_at') THEN
CREATE TRIGGER preview_environments_updated_at BEFORE UPDATE ON public.preview_environments FOR EACH ROW EXECUTE FUNCTION public.update_preview_environments_updated_at();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: agent_commands update_agent_commands_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_agent_commands_updated_at') THEN
CREATE TRIGGER update_agent_commands_updated_at BEFORE UPDATE ON public.agent_commands FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: alert_rules update_alert_rules_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_alert_rules_updated_at') THEN
CREATE TRIGGER update_alert_rules_updated_at BEFORE UPDATE ON public.alert_rules FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: builds update_builds_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_builds_updated_at') THEN
CREATE TRIGGER update_builds_updated_at BEFORE UPDATE ON public.builds FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_controls update_compliance_controls_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_compliance_controls_updated_at') THEN
CREATE TRIGGER update_compliance_controls_updated_at BEFORE UPDATE ON public.compliance_controls FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_frameworks update_compliance_frameworks_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_compliance_frameworks_updated_at') THEN
CREATE TRIGGER update_compliance_frameworks_updated_at BEFORE UPDATE ON public.compliance_frameworks FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_reports update_compliance_reports_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_compliance_reports_updated_at') THEN
CREATE TRIGGER update_compliance_reports_updated_at BEFORE UPDATE ON public.compliance_reports FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_risks update_compliance_risks_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_compliance_risks_updated_at') THEN
CREATE TRIGGER update_compliance_risks_updated_at BEFORE UPDATE ON public.compliance_risks FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: container_instances update_container_instances_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_container_instances_updated_at') THEN
CREATE TRIGGER update_container_instances_updated_at BEFORE UPDATE ON public.container_instances FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: cron_jobs update_cron_jobs_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_cron_jobs_updated_at') THEN
CREATE TRIGGER update_cron_jobs_updated_at BEFORE UPDATE ON public.cron_jobs FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: data_retention_policies update_data_retention_policies_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_data_retention_policies_updated_at') THEN
CREATE TRIGGER update_data_retention_policies_updated_at BEFORE UPDATE ON public.data_retention_policies FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: database_services update_database_services_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_database_services_updated_at') THEN
CREATE TRIGGER update_database_services_updated_at BEFORE UPDATE ON public.database_services FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: deployments update_deployments_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_deployments_updated_at') THEN
CREATE TRIGGER update_deployments_updated_at BEFORE UPDATE ON public.deployments FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: dns_records update_dns_records_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_dns_records_updated_at') THEN
CREATE TRIGGER update_dns_records_updated_at BEFORE UPDATE ON public.dns_records FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: environment_variables update_environment_variables_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_environment_variables_updated_at') THEN
CREATE TRIGGER update_environment_variables_updated_at BEFORE UPDATE ON public.environment_variables FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: environments update_environments_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_environments_updated_at') THEN
CREATE TRIGGER update_environments_updated_at BEFORE UPDATE ON public.environments FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: git_branches update_git_branches_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_git_branches_updated_at') THEN
CREATE TRIGGER update_git_branches_updated_at BEFORE UPDATE ON public.git_branches FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: git_deployment_triggers update_git_deployment_triggers_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_git_deployment_triggers_updated_at') THEN
CREATE TRIGGER update_git_deployment_triggers_updated_at BEFORE UPDATE ON public.git_deployment_triggers FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: git_providers update_git_providers_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_git_providers_updated_at') THEN
CREATE TRIGGER update_git_providers_updated_at BEFORE UPDATE ON public.git_providers FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: git_repositories update_git_repositories_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_git_repositories_updated_at') THEN
CREATE TRIGGER update_git_repositories_updated_at BEFORE UPDATE ON public.git_repositories FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: git_webhooks update_git_webhooks_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_git_webhooks_updated_at') THEN
CREATE TRIGGER update_git_webhooks_updated_at BEFORE UPDATE ON public.git_webhooks FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: metrics_aggregation_rules update_metrics_aggregation_rules_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_metrics_aggregation_rules_updated_at') THEN
CREATE TRIGGER update_metrics_aggregation_rules_updated_at BEFORE UPDATE ON public.metrics_aggregation_rules FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: node_agents update_node_agents_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_node_agents_updated_at') THEN
CREATE TRIGGER update_node_agents_updated_at BEFORE UPDATE ON public.node_agents FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: node_clusters update_node_clusters_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_node_clusters_updated_at') THEN
CREATE TRIGGER update_node_clusters_updated_at BEFORE UPDATE ON public.node_clusters FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: projects update_projects_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_projects_updated_at') THEN
CREATE TRIGGER update_projects_updated_at BEFORE UPDATE ON public.projects FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: scheduling_rules update_scheduling_rules_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_scheduling_rules_updated_at') THEN
CREATE TRIGGER update_scheduling_rules_updated_at BEFORE UPDATE ON public.scheduling_rules FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: security_scans update_security_scans_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_security_scans_updated_at') THEN
CREATE TRIGGER update_security_scans_updated_at BEFORE UPDATE ON public.security_scans FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: service_discovery update_service_discovery_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_service_discovery_updated_at') THEN
CREATE TRIGGER update_service_discovery_updated_at BEFORE UPDATE ON public.service_discovery FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: services update_services_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_services_updated_at') THEN
CREATE TRIGGER update_services_updated_at BEFORE UPDATE ON public.services FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: users update_users_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_users_updated_at') THEN
CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON public.users FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: vulnerabilities update_vulnerabilities_updated_at; Type: TRIGGER; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_vulnerabilities_updated_at') THEN
CREATE TRIGGER update_vulnerabilities_updated_at BEFORE UPDATE ON public.vulnerabilities FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
END IF;
END $$;
-- +goose StatementEnd
--
-- Name: agent_commands agent_commands_container_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'agent_commands_container_id_fkey') THEN
ALTER TABLE ONLY public.agent_commands
ADD CONSTRAINT agent_commands_container_id_fkey FOREIGN KEY (container_id) REFERENCES public.container_instances(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: agent_commands agent_commands_node_agent_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'agent_commands_node_agent_id_fkey') THEN
ALTER TABLE ONLY public.agent_commands
ADD CONSTRAINT agent_commands_node_agent_id_fkey FOREIGN KEY (node_agent_id) REFERENCES public.node_agents(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: agent_heartbeats agent_heartbeats_node_agent_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'agent_heartbeats_node_agent_id_fkey') THEN
ALTER TABLE ONLY public.agent_heartbeats
ADD CONSTRAINT agent_heartbeats_node_agent_id_fkey FOREIGN KEY (node_agent_id) REFERENCES public.node_agents(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: alert_incidents alert_incidents_rule_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'alert_incidents_rule_id_fkey') THEN
ALTER TABLE ONLY public.alert_incidents
ADD CONSTRAINT alert_incidents_rule_id_fkey FOREIGN KEY (rule_id) REFERENCES public.alert_rules(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: audit_logs audit_logs_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'audit_logs_user_id_fkey') THEN
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;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cluster_agents cluster_agents_agent_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cluster_agents_agent_id_fkey') THEN
ALTER TABLE ONLY public.cluster_agents
ADD CONSTRAINT cluster_agents_agent_id_fkey FOREIGN KEY (agent_id) REFERENCES public.node_agents(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cluster_agents cluster_agents_cluster_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cluster_agents_cluster_id_fkey') THEN
ALTER TABLE ONLY public.cluster_agents
ADD CONSTRAINT cluster_agents_cluster_id_fkey FOREIGN KEY (cluster_id) REFERENCES public.node_clusters(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_controls compliance_controls_framework_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_controls_framework_id_fkey') THEN
ALTER TABLE ONLY public.compliance_controls
ADD CONSTRAINT compliance_controls_framework_id_fkey FOREIGN KEY (framework_id) REFERENCES public.compliance_frameworks(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_reports compliance_reports_framework_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_reports_framework_id_fkey') THEN
ALTER TABLE ONLY public.compliance_reports
ADD CONSTRAINT compliance_reports_framework_id_fkey FOREIGN KEY (framework_id) REFERENCES public.compliance_frameworks(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_reports compliance_reports_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_reports_project_id_fkey') THEN
ALTER TABLE ONLY public.compliance_reports
ADD CONSTRAINT compliance_reports_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_risks compliance_risks_control_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_risks_control_id_fkey') THEN
ALTER TABLE ONLY public.compliance_risks
ADD CONSTRAINT compliance_risks_control_id_fkey FOREIGN KEY (control_id) REFERENCES public.compliance_controls(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: compliance_risks compliance_risks_report_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'compliance_risks_report_id_fkey') THEN
ALTER TABLE ONLY public.compliance_risks
ADD CONSTRAINT compliance_risks_report_id_fkey FOREIGN KEY (report_id) REFERENCES public.compliance_reports(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: container_instances container_instances_node_agent_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'container_instances_node_agent_id_fkey') THEN
ALTER TABLE ONLY public.container_instances
ADD CONSTRAINT container_instances_node_agent_id_fkey FOREIGN KEY (node_agent_id) REFERENCES public.node_agents(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: container_metrics container_metrics_container_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'container_metrics_container_id_fkey') THEN
ALTER TABLE ONLY public.container_metrics
ADD CONSTRAINT container_metrics_container_id_fkey FOREIGN KEY (container_id) REFERENCES public.container_instances(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cron_executions cron_executions_cron_job_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cron_executions_cron_job_id_fkey') THEN
ALTER TABLE ONLY public.cron_executions
ADD CONSTRAINT cron_executions_cron_job_id_fkey FOREIGN KEY (cron_job_id) REFERENCES public.cron_jobs(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cron_jobs cron_jobs_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cron_jobs_project_id_fkey') THEN
ALTER TABLE ONLY public.cron_jobs
ADD CONSTRAINT cron_jobs_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: cron_jobs cron_jobs_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'cron_jobs_service_id_fkey') THEN
ALTER TABLE ONLY public.cron_jobs
ADD CONSTRAINT cron_jobs_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: deployments deployments_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'deployments_service_id_fkey') THEN
ALTER TABLE ONLY public.deployments
ADD CONSTRAINT deployments_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: environment_variables environment_variables_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'environment_variables_service_id_fkey') THEN
ALTER TABLE ONLY public.environment_variables
ADD CONSTRAINT environment_variables_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: environments environments_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'environments_project_id_fkey') THEN
ALTER TABLE ONLY public.environments
ADD CONSTRAINT environments_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_backups fk_backup_database; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_backup_database') THEN
ALTER TABLE ONLY public.database_backups
ADD CONSTRAINT fk_backup_database FOREIGN KEY (database_id) REFERENCES public.database_services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_services fk_database_user; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_database_user') THEN
ALTER TABLE ONLY public.database_services
ADD CONSTRAINT fk_database_user FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_metrics fk_metrics_database; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_metrics_database') THEN
ALTER TABLE ONLY public.database_metrics
ADD CONSTRAINT fk_metrics_database FOREIGN KEY (database_id) REFERENCES public.database_services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_settings fk_settings_database; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_settings_database') THEN
ALTER TABLE ONLY public.database_settings
ADD CONSTRAINT fk_settings_database FOREIGN KEY (database_id) REFERENCES public.database_services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_branches git_branches_repo_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_branches_repo_id_fkey') THEN
ALTER TABLE ONLY public.git_branches
ADD CONSTRAINT git_branches_repo_id_fkey FOREIGN KEY (repo_id) REFERENCES public.git_repositories(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_deployment_triggers git_deployment_triggers_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_deployment_triggers_service_id_fkey') THEN
ALTER TABLE ONLY public.git_deployment_triggers
ADD CONSTRAINT git_deployment_triggers_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_deployment_triggers git_deployment_triggers_webhook_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_deployment_triggers_webhook_id_fkey') THEN
ALTER TABLE ONLY public.git_deployment_triggers
ADD CONSTRAINT git_deployment_triggers_webhook_id_fkey FOREIGN KEY (webhook_id) REFERENCES public.git_webhooks(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_providers git_providers_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_providers_user_id_fkey') THEN
ALTER TABLE ONLY public.git_providers
ADD CONSTRAINT git_providers_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_repositories git_repositories_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_repositories_provider_id_fkey') THEN
ALTER TABLE ONLY public.git_repositories
ADD CONSTRAINT git_repositories_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.git_providers(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_repositories git_repositories_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_repositories_user_id_fkey') THEN
ALTER TABLE ONLY public.git_repositories
ADD CONSTRAINT git_repositories_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_webhooks git_webhooks_provider_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_webhooks_provider_id_fkey') THEN
ALTER TABLE ONLY public.git_webhooks
ADD CONSTRAINT git_webhooks_provider_id_fkey FOREIGN KEY (provider_id) REFERENCES public.git_providers(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: git_webhooks git_webhooks_repo_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'git_webhooks_repo_id_fkey') THEN
ALTER TABLE ONLY public.git_webhooks
ADD CONSTRAINT git_webhooks_repo_id_fkey FOREIGN KEY (repo_id) REFERENCES public.git_repositories(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: incident_events incident_events_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'incident_events_api_key_id_fkey') THEN
ALTER TABLE ONLY public.incident_events
ADD CONSTRAINT incident_events_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE SET NULL;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: incident_events incident_events_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'incident_events_service_id_fkey') THEN
ALTER TABLE ONLY public.incident_events
ADD CONSTRAINT incident_events_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.api_services(id) ON DELETE SET NULL;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: instance_metrics instance_metrics_service_id_timestamp_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'instance_metrics_service_id_timestamp_fkey') THEN
ALTER TABLE ONLY public.instance_metrics
ADD CONSTRAINT instance_metrics_service_id_timestamp_fkey FOREIGN KEY (service_id, "timestamp") REFERENCES public.service_metrics(service_id, "timestamp") ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: preview_environments preview_environments_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'preview_environments_project_id_fkey') THEN
ALTER TABLE ONLY public.preview_environments
ADD CONSTRAINT preview_environments_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: preview_environments preview_environments_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'preview_environments_service_id_fkey') THEN
ALTER TABLE ONLY public.preview_environments
ADD CONSTRAINT preview_environments_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: project_members project_members_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'project_members_project_id_fkey') THEN
ALTER TABLE ONLY public.project_members
ADD CONSTRAINT project_members_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: project_members project_members_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'project_members_user_id_fkey') THEN
ALTER TABLE ONLY public.project_members
ADD CONSTRAINT project_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: projects projects_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'projects_owner_id_fkey') THEN
ALTER TABLE ONLY public.projects
ADD CONSTRAINT projects_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES public.users(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: scheduling_rules scheduling_rules_cluster_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'scheduling_rules_cluster_id_fkey') THEN
ALTER TABLE ONLY public.scheduling_rules
ADD CONSTRAINT scheduling_rules_cluster_id_fkey FOREIGN KEY (cluster_id) REFERENCES public.node_clusters(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: security_scans security_scans_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'security_scans_project_id_fkey') THEN
ALTER TABLE ONLY public.security_scans
ADD CONSTRAINT security_scans_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: security_scans security_scans_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'security_scans_service_id_fkey') THEN
ALTER TABLE ONLY public.security_scans
ADD CONSTRAINT security_scans_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_dependencies service_dependencies_depends_on_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_dependencies_depends_on_service_id_fkey') THEN
ALTER TABLE ONLY public.service_dependencies
ADD CONSTRAINT service_dependencies_depends_on_service_id_fkey FOREIGN KEY (depends_on_service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: service_dependencies service_dependencies_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'service_dependencies_service_id_fkey') THEN
ALTER TABLE ONLY public.service_dependencies
ADD CONSTRAINT service_dependencies_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: services services_environment_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'services_environment_id_fkey') THEN
ALTER TABLE ONLY public.services
ADD CONSTRAINT services_environment_id_fkey FOREIGN KEY (environment_id) REFERENCES public.environments(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: services services_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'services_project_id_fkey') THEN
ALTER TABLE ONLY public.services
ADD CONSTRAINT services_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: usage_counters usage_counters_api_key_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'usage_counters_api_key_id_fkey') THEN
ALTER TABLE ONLY public.usage_counters
ADD CONSTRAINT usage_counters_api_key_id_fkey FOREIGN KEY (api_key_id) REFERENCES public.api_keys(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: usage_counters usage_counters_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'usage_counters_service_id_fkey') THEN
ALTER TABLE ONLY public.usage_counters
ADD CONSTRAINT usage_counters_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.api_services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: vulnerabilities vulnerabilities_project_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'vulnerabilities_project_id_fkey') THEN
ALTER TABLE ONLY public.vulnerabilities
ADD CONSTRAINT vulnerabilities_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: vulnerabilities vulnerabilities_service_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'vulnerabilities_service_id_fkey') THEN
ALTER TABLE ONLY public.vulnerabilities
ADD CONSTRAINT vulnerabilities_service_id_fkey FOREIGN KEY (service_id) REFERENCES public.services(id) ON DELETE CASCADE;
END IF;
EXCEPTION WHEN duplicate_object OR invalid_table_definition THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_services Users can delete their own database services; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can delete their own database services' AND polrelid = 'public.database_services'::regclass) THEN
CREATE POLICY "Users can delete their own database services" ON public.database_services FOR DELETE USING ((user_id = (current_setting('app.current_user_id'::text, true))::uuid));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_backups Users can insert backups for their own databases; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can insert backups for their own databases' AND polrelid = 'public.database_backups'::regclass) THEN
CREATE POLICY "Users can insert backups for their own databases" ON public.database_backups FOR INSERT WITH CHECK (((database_id)::text IN ( SELECT database_services.id
FROM public.database_services
WHERE (database_services.user_id = (current_setting('app.current_user_id'::text, true))::uuid))));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_metrics Users can insert metrics for their own databases; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can insert metrics for their own databases' AND polrelid = 'public.database_metrics'::regclass) THEN
CREATE POLICY "Users can insert metrics for their own databases" ON public.database_metrics FOR INSERT WITH CHECK (((database_id)::text IN ( SELECT database_services.id
FROM public.database_services
WHERE (database_services.user_id = (current_setting('app.current_user_id'::text, true))::uuid))));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_services Users can insert their own database services; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can insert their own database services' AND polrelid = 'public.database_services'::regclass) THEN
CREATE POLICY "Users can insert their own database services" ON public.database_services FOR INSERT WITH CHECK ((user_id = (current_setting('app.current_user_id'::text, true))::uuid));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_settings Users can update settings of their own databases; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can update settings of their own databases' AND polrelid = 'public.database_settings'::regclass) THEN
CREATE POLICY "Users can update settings of their own databases" ON public.database_settings FOR UPDATE USING (((database_id)::text IN ( SELECT database_services.id
FROM public.database_services
WHERE (database_services.user_id = (current_setting('app.current_user_id'::text, true))::uuid))));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_services Users can update their own database services; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can update their own database services' AND polrelid = 'public.database_services'::regclass) THEN
CREATE POLICY "Users can update their own database services" ON public.database_services FOR UPDATE USING ((user_id = (current_setting('app.current_user_id'::text, true))::uuid));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_backups Users can view backups of their own databases; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can view backups of their own databases' AND polrelid = 'public.database_backups'::regclass) THEN
CREATE POLICY "Users can view backups of their own databases" ON public.database_backups FOR SELECT USING (((database_id)::text IN ( SELECT database_services.id
FROM public.database_services
WHERE (database_services.user_id = (current_setting('app.current_user_id'::text, true))::uuid))));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_metrics Users can view metrics of their own databases; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can view metrics of their own databases' AND polrelid = 'public.database_metrics'::regclass) THEN
CREATE POLICY "Users can view metrics of their own databases" ON public.database_metrics FOR SELECT USING (((database_id)::text IN ( SELECT database_services.id
FROM public.database_services
WHERE (database_services.user_id = (current_setting('app.current_user_id'::text, true))::uuid))));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_settings Users can view settings of their own databases; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can view settings of their own databases' AND polrelid = 'public.database_settings'::regclass) THEN
CREATE POLICY "Users can view settings of their own databases" ON public.database_settings FOR SELECT USING (((database_id)::text IN ( SELECT database_services.id
FROM public.database_services
WHERE (database_services.user_id = (current_setting('app.current_user_id'::text, true))::uuid))));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_services Users can view their own database services; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'Users can view their own database services' AND polrelid = 'public.database_services'::regclass) THEN
CREATE POLICY "Users can view their own database services" ON public.database_services FOR SELECT USING ((user_id = (current_setting('app.current_user_id'::text, true))::uuid));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: anonymized_data; Type: ROW SECURITY; Schema: public; Owner: -
--
ALTER TABLE public.anonymized_data ENABLE ROW LEVEL SECURITY;
--
-- Name: anonymized_data anonymized_data_policy; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'anonymized_data_policy' AND polrelid = 'public.anonymized_data'::regclass) THEN
CREATE POLICY anonymized_data_policy ON public.anonymized_data FOR SELECT USING ((current_setting('app.is_admin'::text, true))::boolean);
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: audit_logs; Type: ROW SECURITY; Schema: public; Owner: -
--
ALTER TABLE public.audit_logs ENABLE ROW LEVEL SECURITY;
--
-- Name: audit_logs audit_logs_insert_policy; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'audit_logs_insert_policy' AND polrelid = 'public.audit_logs'::regclass) THEN
CREATE POLICY audit_logs_insert_policy ON public.audit_logs FOR INSERT WITH CHECK (false);
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: audit_logs audit_logs_update_policy; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'audit_logs_update_policy' AND polrelid = 'public.audit_logs'::regclass) THEN
CREATE POLICY audit_logs_update_policy ON public.audit_logs FOR UPDATE WITH CHECK (false);
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: audit_logs audit_logs_user_policy; Type: POLICY; Schema: public; Owner: -
--
-- +goose StatementBegin
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_policy WHERE polname = 'audit_logs_user_policy' AND polrelid = 'public.audit_logs'::regclass) THEN
CREATE POLICY audit_logs_user_policy ON public.audit_logs FOR SELECT USING ((user_id = (current_setting('app.current_user_id'::text))::uuid));
END IF;
EXCEPTION WHEN undefined_table THEN NULL;
END $$;
-- +goose StatementEnd
--
-- Name: database_backups; Type: ROW SECURITY; Schema: public; Owner: -
--
ALTER TABLE public.database_backups ENABLE ROW LEVEL SECURITY;
--
-- Name: database_metrics; Type: ROW SECURITY; Schema: public; Owner: -
--
ALTER TABLE public.database_metrics ENABLE ROW LEVEL SECURITY;
--
-- Name: database_services; Type: ROW SECURITY; Schema: public; Owner: -
--
ALTER TABLE public.database_services ENABLE ROW LEVEL SECURITY;
--
-- Name: database_settings; Type: ROW SECURITY; Schema: public; Owner: -
--
ALTER TABLE public.database_settings ENABLE ROW LEVEL SECURITY;
--
-- PostgreSQL database dump complete
--
-- Seed the default node cluster (carried over from legacy migration 003).
INSERT INTO public.node_clusters (id, name, description, status, total_resources, used_resources)
VALUES (
'default-cluster', 'Default Cluster', 'Default cluster for all node agents', 'active',
'{}'::jsonb, '{}'::jsonb
) ON CONFLICT (id) DO NOTHING;
-- +goose Down
-- Full schema teardown for the baseline.
-- +goose StatementBegin
DO $$
DECLARE r RECORD;
BEGIN
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP
EXECUTE 'DROP TABLE IF EXISTS public.' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
END $$;
-- +goose StatementEnd