Files
incudal/server/prisma/migrations/20260407100000_add_host_address_registry/migration.sql
T
2026-06-20 14:26:29 +08:00

74 lines
3.5 KiB
SQL

CREATE TYPE "HostAddressKind" AS ENUM ('domain', 'ipv4', 'ipv6');
CREATE TYPE "HostAddressSource" AS ENUM ('input', 'resolved');
CREATE TYPE "HostAddressCheckTrigger" AS ENUM ('create', 'update', 'backfill', 'poll');
CREATE TYPE "HostAddressCheckStatus" AS ENUM ('success', 'failed');
CREATE TYPE "HostAddressConflictStatus" AS ENUM ('active', 'resolved');
CREATE TABLE "host_address_aliases" (
"id" SERIAL NOT NULL,
"host_id" INTEGER NOT NULL,
"address" TEXT NOT NULL,
"kind" "HostAddressKind" NOT NULL,
"source" "HostAddressSource" NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "host_address_aliases_pkey" PRIMARY KEY ("id")
);
CREATE TABLE "host_address_resolution_logs" (
"id" SERIAL NOT NULL,
"host_id" INTEGER NOT NULL,
"input_address" TEXT NOT NULL,
"input_kind" "HostAddressKind" NOT NULL,
"trigger" "HostAddressCheckTrigger" NOT NULL,
"status" "HostAddressCheckStatus" NOT NULL,
"resolved_addresses" JSONB NOT NULL DEFAULT '[]',
"error" TEXT,
"details" JSONB DEFAULT '{}',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "host_address_resolution_logs_pkey" PRIMARY KEY ("id")
);
CREATE TABLE "host_address_conflicts" (
"id" SERIAL NOT NULL,
"host_a_id" INTEGER NOT NULL,
"host_b_id" INTEGER NOT NULL,
"address" TEXT NOT NULL,
"status" "HostAddressConflictStatus" NOT NULL DEFAULT 'active',
"first_detected_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"last_detected_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"resolved_at" TIMESTAMP(3),
CONSTRAINT "host_address_conflicts_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "host_address_aliases_host_id_address_key" ON "host_address_aliases"("host_id", "address");
CREATE INDEX "host_address_aliases_host_id_idx" ON "host_address_aliases"("host_id");
CREATE INDEX "host_address_aliases_address_idx" ON "host_address_aliases"("address");
CREATE INDEX "host_address_aliases_source_kind_idx" ON "host_address_aliases"("source", "kind");
CREATE INDEX "host_address_resolution_logs_host_id_created_at_idx" ON "host_address_resolution_logs"("host_id", "created_at" DESC);
CREATE INDEX "host_address_resolution_logs_status_created_at_idx" ON "host_address_resolution_logs"("status", "created_at" DESC);
CREATE UNIQUE INDEX "host_address_conflicts_host_a_id_host_b_id_address_key" ON "host_address_conflicts"("host_a_id", "host_b_id", "address");
CREATE INDEX "host_address_conflicts_address_idx" ON "host_address_conflicts"("address");
CREATE INDEX "host_address_conflicts_status_last_detected_at_idx" ON "host_address_conflicts"("status", "last_detected_at" DESC);
ALTER TABLE "host_address_aliases"
ADD CONSTRAINT "host_address_aliases_host_id_fkey"
FOREIGN KEY ("host_id") REFERENCES "hosts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "host_address_resolution_logs"
ADD CONSTRAINT "host_address_resolution_logs_host_id_fkey"
FOREIGN KEY ("host_id") REFERENCES "hosts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "host_address_conflicts"
ADD CONSTRAINT "host_address_conflicts_host_a_id_fkey"
FOREIGN KEY ("host_a_id") REFERENCES "hosts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "host_address_conflicts"
ADD CONSTRAINT "host_address_conflicts_host_b_id_fkey"
FOREIGN KEY ("host_b_id") REFERENCES "hosts"("id") ON DELETE CASCADE ON UPDATE CASCADE;