base
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE t_sms_sp_svc_product ADD COLUMN cal_used_depth integer;
|
||||
ALTER TABLE t_sms_sp_svc_product ALTER COLUMN cal_used_depth SET STORAGE PLAIN;
|
||||
ALTER TABLE t_sms_sp_svc_product ALTER COLUMN cal_used_depth SET DEFAULT 0;
|
||||
COMMENT ON COLUMN t_sms_sp_svc_product.cal_used_depth IS '볼륨 용량 조회 기준 depth ';
|
||||
@@ -0,0 +1,79 @@
|
||||
-- Table: t_dav_use_dir
|
||||
|
||||
-- DROP TABLE t_dav_use_dir;
|
||||
|
||||
CREATE TABLE t_dav_use_dir
|
||||
(
|
||||
dir_id bigserial NOT NULL,
|
||||
sp_user_seq bigint NOT NULL,
|
||||
sp_svc_tran_id bigint NOT NULL,
|
||||
dir_pid bigint,
|
||||
depth integer,
|
||||
path_name character varying(4096),
|
||||
dir_used bigint DEFAULT 0,
|
||||
CONSTRAINT pk_dir_dav_used_dir_id PRIMARY KEY (dir_id),
|
||||
CONSTRAINT fk_dav_use_dir_dav_userdir FOREIGN KEY (dir_pid)
|
||||
REFERENCES t_dav_use_dir (dir_id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION ON DELETE NO ACTION,
|
||||
CONSTRAINT fk_dir_dav_used_sp_svc_tran_id FOREIGN KEY (sp_svc_tran_id)
|
||||
REFERENCES t_sms_sp_svc_product (sp_svc_tran_id) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION ON DELETE NO ACTION,
|
||||
CONSTRAINT fk_dir_dav_used_sp_user_seq FOREIGN KEY (sp_user_seq)
|
||||
REFERENCES t_sms_sp_user (sp_user_seq) MATCH SIMPLE
|
||||
ON UPDATE NO ACTION ON DELETE NO ACTION,
|
||||
CONSTRAINT uk_dir_dav_used_path UNIQUE (path_name)
|
||||
)
|
||||
WITH (
|
||||
OIDS=FALSE
|
||||
);
|
||||
ALTER TABLE t_dav_use_dir OWNER TO syshost;
|
||||
|
||||
-- Index: idx_dav_use_dir_pk
|
||||
|
||||
-- DROP INDEX idx_dav_use_dir_pk;
|
||||
|
||||
CREATE INDEX idx_dav_use_dir_pk
|
||||
ON t_dav_use_dir
|
||||
USING btree
|
||||
(dir_id);
|
||||
|
||||
|
||||
-- Index: idx_dav_use_dir_depth_path
|
||||
|
||||
-- DROP INDEX idx_dav_use_dir_depth_path;
|
||||
|
||||
CREATE INDEX idx_dav_use_dir_depth_path
|
||||
ON t_dav_use_dir
|
||||
USING btree
|
||||
(depth, path_name);
|
||||
|
||||
-- Index: idx_dav_use_dir_depth_path_lower
|
||||
|
||||
-- DROP INDEX idx_dav_use_dir_depth_path_lower;
|
||||
|
||||
CREATE INDEX idx_dav_use_dir_depth_path_lower
|
||||
ON t_dav_use_dir
|
||||
USING btree
|
||||
(depth, lower(path_name));
|
||||
|
||||
|
||||
-- Index: idx_dav_use_dir_pid
|
||||
|
||||
-- DROP INDEX idx_dav_use_dir_pid;
|
||||
|
||||
CREATE INDEX idx_dav_use_dir_pid
|
||||
ON t_dav_use_dir
|
||||
USING btree
|
||||
(dir_pid);
|
||||
|
||||
|
||||
-- Trigger: trig_use_dir_inser_before on t_dav_use_dir
|
||||
|
||||
-- DROP TRIGGER trig_use_dir_inser_before ON t_dav_use_dir;
|
||||
|
||||
CREATE TRIGGER trig_use_dir_inser_before
|
||||
BEFORE INSERT
|
||||
ON t_dav_use_dir
|
||||
FOR EACH ROW
|
||||
EXECUTE PROCEDURE use_dir_trigger();
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
DROP TRIGGER trig_use_dir_inser_before ON t_dav_use_dir;
|
||||
-- DROP TRIGGER trig_use_dir_update_before ON t_dav_use_dir;
|
||||
DROP FUNCTION use_dir_trigger();
|
||||
|
||||
CREATE FUNCTION use_dir_trigger() RETURNS TRIGGER AS $use_dir_trigger$
|
||||
DECLARE
|
||||
cid integer;
|
||||
pdirid bigint;
|
||||
ppath text;
|
||||
patharry text[];
|
||||
BEGIN
|
||||
-- root path
|
||||
IF NEW.depth <= 0 THEN
|
||||
RETURN NEW;
|
||||
END IF;
|
||||
|
||||
-- parent path
|
||||
patharry := string_to_array(NEW.path_name, '/');
|
||||
|
||||
ppath := '';
|
||||
FOR cid IN 0 .. (NEW.depth - 1)
|
||||
LOOP
|
||||
ppath := ppath || '/';
|
||||
ppath := ppath || patharry[cid+2];
|
||||
END LOOP;
|
||||
|
||||
SELECT dir_id INTO pdirid FROM t_dav_use_dir WHERE depth = (NEW.depth - 1) AND path_name = ppath;
|
||||
|
||||
IF (TG_OP = 'INSERT') THEN
|
||||
-- RAISE NOTICE 'pdir_id - %, parent path - %', pdirid, ppath;
|
||||
|
||||
IF pdirid IS NULL THEN
|
||||
BEGIN
|
||||
IF (NEW.depth - 1) > 0 THEN
|
||||
INSERT INTO t_dav_use_dir (sp_user_seq, sp_svc_tran_id, dir_pid, depth, path_name, dir_used)
|
||||
SELECT NEW.sp_user_seq, NEW.sp_svc_tran_id, 0, (NEW.depth - 1), ppath, 0;
|
||||
ELSE
|
||||
INSERT INTO t_dav_use_dir (sp_user_seq, sp_svc_tran_id, depth, path_name, dir_used)
|
||||
SELECT NEW.sp_user_seq, NEW.sp_svc_tran_id, 0, ppath, 0;
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN unique_violation OR undefined_column THEN
|
||||
-- do nothing
|
||||
END;
|
||||
|
||||
SELECT dir_id INTO pdirid FROM t_dav_use_dir WHERE depth = (NEW.depth - 1) AND path_name = ppath;
|
||||
END IF ;
|
||||
|
||||
IF pdirid IS NOT NULL THEN
|
||||
NEW.dir_pid = pdirid;
|
||||
END IF ;
|
||||
/*
|
||||
ELSIF (TG_OP = 'UPDATE') THEN
|
||||
IF ( TG_WHEN = 'BEFORE' ) THEN
|
||||
-- RAISE NOTICE 'UPDATE BEFORE pdir_id - %, parent path - %, used = %', pdirid, ppath, NEW.dir_used;
|
||||
IF pdirid IS NOT NULL THEN
|
||||
UPDATE t_dav_use_dir SET dir_used = dir_used +( NEW.dir_used - OLD.dir_used )
|
||||
WHERE depth = (NEW.depth - 1) AND path_name = ppath;
|
||||
END IF;
|
||||
END IF;
|
||||
--*/
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
EXCEPTION
|
||||
WHEN unique_violation OR undefined_column THEN
|
||||
RAISE NOTICE 'use_dir_trigger EXCEPTION';
|
||||
RETURN NEW;
|
||||
END;
|
||||
$use_dir_trigger$ LANGUAGE 'plpgsql';
|
||||
|
||||
|
||||
CREATE TRIGGER trig_use_dir_inser_before BEFORE INSERT ON t_dav_use_dir FOR EACH ROW EXECUTE PROCEDURE use_dir_trigger();
|
||||
-- CREATE TRIGGER trig_use_dir_update_before BEFORE UPDATE ON t_dav_use_dir FOR EACH ROW EXECUTE PROCEDURE use_dir_trigger();
|
||||
Reference in New Issue
Block a user