加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql 分区的一个例子。

发布时间:2020-12-13 17:36:23 所属栏目:百科 来源:网络整理
导读:1: 主表: CREATE TABLE cms.pmd_opts( id integer NOT NULL DEFAULT nextval('master.fact_data_id_seq'::regclass),created timestamp with time zone DEFAULT now(),updated timestamp with time zone DEFAULT now(),pmd_id integer NOT NULL,lovd_id in

1: 主表:

CREATE TABLE cms.pmd_opts
(
  id integer NOT NULL DEFAULT nextval('master.fact_data_id_seq'::regclass),created timestamp with time zone DEFAULT now(),updated timestamp with time zone DEFAULT now(),pmd_id integer NOT NULL,lovd_id integer NOT NULL,-- Set default value
  mt_attr_id integer NOT NULL,lov_id integer,mt_id integer NOT NULL,-- 省略contraint
)


opts 数据是根据mt_attr_id 查找字典然后选择子表插入,定义function如下:

CREATE OR REPLACE FUNCTION cms.fc_insert_pmd_opts(id integer,pmd_id integer,lovd_id integer,mt_attr_id integer,mt_id integer)
  RETURNS integer AS
$BODY$DECLARE
v_pmd_opt Integer;
v_opt_scheme Varchar;
v_opt_table Varchar;
v_un Varchar;
BEGIN
SELECT se_name,tb_name,un INTO v_opt_scheme,v_opt_table,v_un FROM v_mt_attr va WHERE va.id=mt_attr_id;
IF NOT FOUND THEN
	RAISE EXCEPTION 'Category Not Found';
END IF;
EXECUTE 'insert into '||v_opt_scheme||'.'||v_opt_table||'_'||v_un||'  (id,pmd_id,lovd_id,mt_attr_id,lov_id,mt_id) values '||
 '('||id||','||pmd_id||','||lovd_id||','||mt_attr_id||','||lov_id||','||mt_id||') returning '
 ||v_opt_table||'_'||v_un||'.id' into v_pmd_opt;
  --||v_opt_table||'_'||v_un||'.*' into v_pmd_opt;
 return v_pmd_opt;
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

作用是通过 mt_attr_id 来选择子表。
v_mt_attr

是一个字典视图, 记录了不同的mt_attr_id对应的子表 schema 和 table名称。

以下是定义了转向操作:

CREATE OR REPLACE RULE ri_insert_pmd_opts AS
    ON INSERT TO cms.pmd_opts DO INSTEAD  SELECT cms.fc_insert_pmd_opts(new.id,new.pmd_id,new.lovd_id,new.mt_attr_id,new.lov_id,new.mt_id) AS id;

至此,分区完成。

对于插入的影响就是任何的插入, 就导致返回id. 不需要添加returning id在插入语句。 这是一个不同的地方。 因为插入已经被一个select语句替代。 不需要returning id 来指定返回。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读