616 lines
11 KiB
SQL
616 lines
11 KiB
SQL
|
|
|
|
|
|
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', '', false);
|
|
SET check_function_bodies = false;
|
|
SET xmloption = content;
|
|
SET client_min_messages = warning;
|
|
SET row_security = off;
|
|
|
|
|
|
COMMENT ON SCHEMA "public" IS 'standard public schema';
|
|
|
|
|
|
|
|
CREATE EXTENSION IF NOT EXISTS "pg_stat_statements" WITH SCHEMA "extensions";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto" WITH SCHEMA "extensions";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE EXTENSION IF NOT EXISTS "supabase_vault" WITH SCHEMA "vault";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA "extensions";
|
|
|
|
|
|
|
|
|
|
|
|
SET default_tablespace = '';
|
|
|
|
SET default_table_access_method = "heap";
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS "public"."companies" (
|
|
"id" bigint NOT NULL,
|
|
"name" "text" NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT "now"()
|
|
);
|
|
|
|
|
|
ALTER TABLE "public"."companies" OWNER TO "postgres";
|
|
|
|
|
|
ALTER TABLE "public"."companies" ALTER COLUMN "id" ADD GENERATED BY DEFAULT AS IDENTITY (
|
|
SEQUENCE NAME "public"."companies_id_seq"
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1
|
|
);
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS "public"."daily_stats" (
|
|
"id" bigint NOT NULL,
|
|
"plant_id" "text" NOT NULL,
|
|
"date" "date" NOT NULL,
|
|
"total_generation" double precision DEFAULT 0.0,
|
|
"peak_kw" double precision DEFAULT 0.0,
|
|
"generation_hours" double precision DEFAULT 0.0,
|
|
"created_at" timestamp with time zone DEFAULT "now"()
|
|
);
|
|
|
|
|
|
ALTER TABLE "public"."daily_stats" OWNER TO "postgres";
|
|
|
|
|
|
COMMENT ON TABLE "public"."daily_stats" IS '일일 발전 통계 요약 테이블';
|
|
|
|
|
|
|
|
COMMENT ON COLUMN "public"."daily_stats"."total_generation" IS '당일 총 발전량 (kWh)';
|
|
|
|
|
|
|
|
COMMENT ON COLUMN "public"."daily_stats"."peak_kw" IS '당일 최고 출력 (kW)';
|
|
|
|
|
|
|
|
COMMENT ON COLUMN "public"."daily_stats"."generation_hours" IS '발전 시간 = 발전량 / 설비용량';
|
|
|
|
|
|
|
|
ALTER TABLE "public"."daily_stats" ALTER COLUMN "id" ADD GENERATED BY DEFAULT AS IDENTITY (
|
|
SEQUENCE NAME "public"."daily_stats_id_seq"
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1
|
|
);
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS "public"."monthly_stats" (
|
|
"id" bigint NOT NULL,
|
|
"plant_id" "text" NOT NULL,
|
|
"month" "text" NOT NULL,
|
|
"total_generation" double precision DEFAULT 0,
|
|
"currnet_last_date" "text",
|
|
"updated_at" timestamp with time zone DEFAULT "timezone"('utc'::"text", "now"()) NOT NULL
|
|
);
|
|
|
|
|
|
ALTER TABLE "public"."monthly_stats" OWNER TO "postgres";
|
|
|
|
|
|
ALTER TABLE "public"."monthly_stats" ALTER COLUMN "id" ADD GENERATED BY DEFAULT AS IDENTITY (
|
|
SEQUENCE NAME "public"."monthly_stats_id_seq"
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1
|
|
);
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS "public"."plants" (
|
|
"id" "text" NOT NULL,
|
|
"company_id" bigint,
|
|
"name" "text" NOT NULL,
|
|
"type" "text",
|
|
"created_at" timestamp with time zone DEFAULT "now"(),
|
|
"capacity" double precision DEFAULT 100.0,
|
|
"initial_cumulative_kwh" double precision DEFAULT 0.0,
|
|
"constructed_at" "date",
|
|
"alerts_enabled" boolean DEFAULT true
|
|
);
|
|
|
|
|
|
ALTER TABLE "public"."plants" OWNER TO "postgres";
|
|
|
|
|
|
COMMENT ON COLUMN "public"."plants"."initial_cumulative_kwh" IS '시스템 도입 이전의 누적 발전량 (기초 자산)';
|
|
|
|
|
|
|
|
COMMENT ON COLUMN "public"."plants"."alerts_enabled" IS '발전소 이상 감지 알림 활성화 여부 (true: 알림 켬, false: 알림 끔)';
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS "public"."solar_logs" (
|
|
"id" bigint NOT NULL,
|
|
"plant_id" "text",
|
|
"current_kw" double precision,
|
|
"today_kwh" double precision,
|
|
"status" "text",
|
|
"created_at" timestamp with time zone DEFAULT "now"()
|
|
);
|
|
|
|
|
|
ALTER TABLE "public"."solar_logs" OWNER TO "postgres";
|
|
|
|
|
|
ALTER TABLE "public"."solar_logs" ALTER COLUMN "id" ADD GENERATED BY DEFAULT AS IDENTITY (
|
|
SEQUENCE NAME "public"."solar_logs_id_seq"
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1
|
|
);
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."companies"
|
|
ADD CONSTRAINT "companies_pkey" PRIMARY KEY ("id");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."daily_stats"
|
|
ADD CONSTRAINT "daily_stats_pkey" PRIMARY KEY ("id");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."daily_stats"
|
|
ADD CONSTRAINT "daily_stats_plant_date_unique" UNIQUE ("plant_id", "date");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."monthly_stats"
|
|
ADD CONSTRAINT "monthly_stats_pkey" PRIMARY KEY ("id");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."monthly_stats"
|
|
ADD CONSTRAINT "monthly_stats_plant_month_key" UNIQUE ("plant_id", "month");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."plants"
|
|
ADD CONSTRAINT "plants_pkey" PRIMARY KEY ("id");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."solar_logs"
|
|
ADD CONSTRAINT "solar_logs_pkey" PRIMARY KEY ("id");
|
|
|
|
|
|
|
|
CREATE INDEX "idx_daily_stats_date" ON "public"."daily_stats" USING "btree" ("date");
|
|
|
|
|
|
|
|
CREATE INDEX "idx_daily_stats_plant_date" ON "public"."daily_stats" USING "btree" ("plant_id", "date");
|
|
|
|
|
|
|
|
CREATE INDEX "idx_daily_stats_plant_id" ON "public"."daily_stats" USING "btree" ("plant_id");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."daily_stats"
|
|
ADD CONSTRAINT "daily_stats_plant_id_fkey" FOREIGN KEY ("plant_id") REFERENCES "public"."plants"("id") ON DELETE CASCADE;
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."plants"
|
|
ADD CONSTRAINT "plants_company_id_fkey" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id");
|
|
|
|
|
|
|
|
ALTER TABLE ONLY "public"."solar_logs"
|
|
ADD CONSTRAINT "solar_logs_plant_id_fkey" FOREIGN KEY ("plant_id") REFERENCES "public"."plants"("id");
|
|
|
|
|
|
|
|
CREATE POLICY "Allow anon insert update" ON "public"."daily_stats" TO "anon" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow anonymous read access on daily_stats" ON "public"."daily_stats" FOR SELECT TO "anon" USING (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow anonymous read access on monthly_stats" ON "public"."monthly_stats" FOR SELECT TO "anon" USING (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow anonymous read access on plants" ON "public"."plants" FOR SELECT TO "anon" USING (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow anonymous read access on solar_logs" ON "public"."solar_logs" FOR SELECT TO "anon" USING (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow authenticated full access on daily_stats" ON "public"."daily_stats" TO "authenticated" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow authenticated full access on monthly_stats" ON "public"."monthly_stats" TO "authenticated" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow authenticated full access on plants" ON "public"."plants" TO "authenticated" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow authenticated full access on solar_logs" ON "public"."solar_logs" TO "authenticated" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow public read access" ON "public"."companies" FOR SELECT TO "authenticated", "anon" USING (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow service_role full access on daily_stats" ON "public"."daily_stats" TO "service_role" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow service_role full access on monthly_stats" ON "public"."monthly_stats" TO "service_role" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Allow service_role full access on solar_logs" ON "public"."solar_logs" TO "service_role" USING (true) WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Public Select" ON "public"."monthly_stats" FOR SELECT USING (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Service Role Insert" ON "public"."monthly_stats" FOR INSERT WITH CHECK (true);
|
|
|
|
|
|
|
|
CREATE POLICY "Service Role Update" ON "public"."monthly_stats" FOR UPDATE USING (true);
|
|
|
|
|
|
|
|
ALTER TABLE "public"."companies" ENABLE ROW LEVEL SECURITY;
|
|
|
|
|
|
ALTER TABLE "public"."daily_stats" ENABLE ROW LEVEL SECURITY;
|
|
|
|
|
|
ALTER TABLE "public"."monthly_stats" ENABLE ROW LEVEL SECURITY;
|
|
|
|
|
|
ALTER TABLE "public"."plants" ENABLE ROW LEVEL SECURITY;
|
|
|
|
|
|
ALTER TABLE "public"."solar_logs" ENABLE ROW LEVEL SECURITY;
|
|
|
|
|
|
|
|
|
|
ALTER PUBLICATION "supabase_realtime" OWNER TO "postgres";
|
|
|
|
|
|
GRANT USAGE ON SCHEMA "public" TO "postgres";
|
|
GRANT USAGE ON SCHEMA "public" TO "anon";
|
|
GRANT USAGE ON SCHEMA "public" TO "authenticated";
|
|
GRANT USAGE ON SCHEMA "public" TO "service_role";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GRANT ALL ON TABLE "public"."companies" TO "anon";
|
|
GRANT ALL ON TABLE "public"."companies" TO "authenticated";
|
|
GRANT ALL ON TABLE "public"."companies" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON SEQUENCE "public"."companies_id_seq" TO "anon";
|
|
GRANT ALL ON SEQUENCE "public"."companies_id_seq" TO "authenticated";
|
|
GRANT ALL ON SEQUENCE "public"."companies_id_seq" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON TABLE "public"."daily_stats" TO "anon";
|
|
GRANT ALL ON TABLE "public"."daily_stats" TO "authenticated";
|
|
GRANT ALL ON TABLE "public"."daily_stats" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON SEQUENCE "public"."daily_stats_id_seq" TO "anon";
|
|
GRANT ALL ON SEQUENCE "public"."daily_stats_id_seq" TO "authenticated";
|
|
GRANT ALL ON SEQUENCE "public"."daily_stats_id_seq" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON TABLE "public"."monthly_stats" TO "anon";
|
|
GRANT ALL ON TABLE "public"."monthly_stats" TO "authenticated";
|
|
GRANT ALL ON TABLE "public"."monthly_stats" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON SEQUENCE "public"."monthly_stats_id_seq" TO "anon";
|
|
GRANT ALL ON SEQUENCE "public"."monthly_stats_id_seq" TO "authenticated";
|
|
GRANT ALL ON SEQUENCE "public"."monthly_stats_id_seq" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON TABLE "public"."plants" TO "anon";
|
|
GRANT ALL ON TABLE "public"."plants" TO "authenticated";
|
|
GRANT ALL ON TABLE "public"."plants" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON TABLE "public"."solar_logs" TO "anon";
|
|
GRANT ALL ON TABLE "public"."solar_logs" TO "authenticated";
|
|
GRANT ALL ON TABLE "public"."solar_logs" TO "service_role";
|
|
|
|
|
|
|
|
GRANT ALL ON SEQUENCE "public"."solar_logs_id_seq" TO "anon";
|
|
GRANT ALL ON SEQUENCE "public"."solar_logs_id_seq" TO "authenticated";
|
|
GRANT ALL ON SEQUENCE "public"."solar_logs_id_seq" TO "service_role";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "postgres";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "anon";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "authenticated";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "service_role";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "postgres";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "anon";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "authenticated";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "service_role";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "postgres";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "anon";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "authenticated";
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "service_role";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|