vd/database/migrations/create_virtual_order_cards_table.pgsql
2019-03-22 11:00:05 +08:00

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