56 lines
1.9 KiB
PL/PgSQL
56 lines
1.9 KiB
PL/PgSQL
DROP TABLE IF EXISTS public.yuntu_report_info;
|
|
|
|
CREATE TABLE public.yuntu_report_info (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
report_id VARCHAR(64) NOT NULL,
|
|
source_type VARCHAR(32) NOT NULL,
|
|
source_report_id VARCHAR(64) NULL,
|
|
aadvid VARCHAR(32) NOT NULL,
|
|
name TEXT NOT NULL,
|
|
price JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
rules JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
analysis_dims JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
categories JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
transaction_channels JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
start_time DATE NOT NULL,
|
|
end_time DATE NOT NULL,
|
|
period_type VARCHAR(32) NULL,
|
|
user_name TEXT NULL,
|
|
payload JSONB NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
CONSTRAINT uq_yuntu_report_info_report_id UNIQUE (report_id),
|
|
CONSTRAINT chk_yuntu_report_info_source_type
|
|
CHECK (source_type IN ('MANUAL_CAPTURE', 'AUTO_COPY')),
|
|
CONSTRAINT chk_yuntu_report_info_copy_source
|
|
CHECK (
|
|
(source_type = 'MANUAL_CAPTURE' AND source_report_id IS NULL)
|
|
OR
|
|
(source_type = 'AUTO_COPY' AND source_report_id IS NOT NULL)
|
|
)
|
|
);
|
|
|
|
CREATE INDEX idx_yuntu_report_info_source_report_id
|
|
ON public.yuntu_report_info (source_report_id);
|
|
|
|
CREATE INDEX idx_yuntu_report_info_created_at
|
|
ON public.yuntu_report_info (created_at DESC);
|
|
|
|
CREATE INDEX idx_yuntu_report_info_aadvid_created_at
|
|
ON public.yuntu_report_info (aadvid, created_at DESC);
|
|
|
|
CREATE OR REPLACE FUNCTION public.set_yuntu_report_info_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
DROP TRIGGER IF EXISTS trg_yuntu_report_info_updated_at ON public.yuntu_report_info;
|
|
|
|
CREATE TRIGGER trg_yuntu_report_info_updated_at
|
|
BEFORE UPDATE ON public.yuntu_report_info
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.set_yuntu_report_info_updated_at();
|