48 lines
1.9 KiB
PL/PgSQL
48 lines
1.9 KiB
PL/PgSQL
-- 服务周期索引
|
|
CREATE INDEX "virtual_order_cards_timelines_index" ON "virtual_order_cards" USING GIN (TIMELINES_INDEX(id, sim));
|
|
CREATE INDEX "virtual_order_renewal_cards_timelines_index" ON "virtual_order_renewal_cards" USING GIN (TIMELINES_INDEX(id, sim));
|
|
CREATE INDEX "virtual_order_renewal_package_cards_timelines_index" ON "virtual_order_renewal_package_cards" USING GIN (TIMELINES_INDEX(id, sim));
|
|
CREATE INDEX "virtual_order_flows_package_cards_index" ON "virtual_order_flows_package_cards" USING GIN (TIMELINES_INDEX(id, sim));
|
|
|
|
-- 增删改卡表时更新索引
|
|
CREATE OR REPLACE FUNCTION REINDEX_TIMELINES ()
|
|
RETURNS TRIGGER
|
|
AS $$
|
|
BEGIN
|
|
IF (TG_OP = 'INSERT') THEN
|
|
UPDATE vd.virtual_order_cards_partition SET updated_at = CURRENT_TIMESTAMP WHERE virtual_order_cards_partition.sim = NEW.sim;
|
|
ELSIF (TG_OP = 'UPDATE') THEN
|
|
UPDATE vd.virtual_order_cards_partition SET updated_at = CURRENT_TIMESTAMP WHERE virtual_order_cards_partition.sim = NEW.sim;
|
|
ELSIF (TG_OP = 'DELETE') THEN
|
|
UPDATE vd.virtual_order_cards_partition SET updated_at = CURRENT_TIMESTAMP WHERE virtual_order_cards_partition.sim = OLD.sim;
|
|
END IF;
|
|
|
|
RETURN NULL;
|
|
END;
|
|
$$
|
|
LANGUAGE plpgsql;
|
|
|
|
DROP TRIGGER IF EXISTS REINDEX_TIMELINES ON cards;
|
|
|
|
CREATE TRIGGER "reindex_timelines" AFTER INSERT
|
|
OR UPDATE OF "virtual_activated_at"
|
|
OR DELETE
|
|
ON cards
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE REINDEX_TIMELINES ();
|
|
|
|
|
|
CREATE OR REPLACE VIEW real_virtual_relations AS
|
|
SELECT
|
|
r.type as type,
|
|
r.company_id as real_company_id,
|
|
r.package_id as real_package_id,
|
|
v.company_id as virtual_company_id,
|
|
v.package_id as virtual_package_id,
|
|
COUNT(*) as times,
|
|
MAX(v.created_at) as updated_at
|
|
FROM real_order_cards_partition as r
|
|
JOIN virtual_order_cards as v ON v.id = r.virtual_order_id
|
|
WHERE r.virtual_order_id <> 0
|
|
GROUP BY r.type,r.company_id,r.package_id,v.company_id,v.package_id
|