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

postgresql数据库批量建数据表

发布时间:2020-12-13 16:10:25 所属栏目:百科 来源:网络整理
导读:在数据库中,有时候需要批量建立数据表进行测试,如果要建立的表太多,用直接用create table 的方式可能比较繁琐,在这里写了一个批量建立数据表的sql函数,以后批量建立就简单了。 首先需要建立一个表空间用于专门存储这些表的磁盘位置。 表空间: -- Table

在数据库中,有时候需要批量建立数据表进行测试,如果要建立的表太多,用直接用create table 的方式可能比较繁琐,在这里写了一个批量建立数据表的sql函数,以后批量建立就简单了。

首先需要建立一个表空间用于专门存储这些表的磁盘位置。

表空间:

-- Tablespace: post_data2
 
-- DROP TABLESPACE post_data2;
 
CREATE TABLESPACE post_data2
   OWNER postgres
   LOCATION F:post_data2;
 
 ALTER TABLESPACE post_data2
   OWNER TO postgres;

?

建表函数:

-- FUNCTION: public.create_tables(integer)

-- DROP FUNCTION public.create_tables(integer);

CREATE OR REPLACE FUNCTION public.create_tables(
    table_num_in integer)
    RETURNS void
    LANGUAGE plpgsql

    COST 100
    VOLATILE 
AS $BODY$

declare
v_table_num integer  :=100;
v_idx integer := 0;
v_strTable varchar :=‘‘;
v_strSql varchar :=‘‘;
begin
  while v_idx < table_num_in loop
  v_idx = v_idx+1;
  v_strTable = CONCAT(table_,v_idx);
  v_strSql = create table ||v_strTable||(idx integer,log varchar)WITH (OIDS = FALSE)TABLESPACE post_data2;;
  EXECUTE v_strSql;
  end loop;
 end

$BODY$;

ALTER FUNCTION public.create_tables(integer)
    OWNER TO postgres;

函数使用

SELECT public.create_tables(100)

执行后会建立100个表

?

删表函数:

?

-- FUNCTION: public.create_tables(integer)

-- DROP FUNCTION public.create_tables(integer);

CREATE OR REPLACE FUNCTION public.drop_tables(
    table_num_in integer)
    RETURNS void
    LANGUAGE plpgsql

    COST 100
    VOLATILE 
AS $BODY$

declare
v_idx integer := 0;
v_strTable varchar :=‘‘;
v_strSql varchar :=‘‘;
begin
  while v_idx < table_num_in loop
  v_idx = v_idx+1;
  v_strTable = CONCAT(table_,v_idx);
  v_strSql = drop table ||v_strTable;
  EXECUTE v_strSql;
  end loop;
 end

$BODY$;

ALTER FUNCTION public.drop_tables(integer)
    OWNER TO postgres;
SELECT public.drop_tables(100)
执行后会删除之前建立的100张表

增加数据函数:

?

-- FUNCTION: public.create_tables(integer)

-- DROP FUNCTION public.create_tables(integer);

CREATE OR REPLACE FUNCTION public.add_tables_data(
    add_times_in integer,add_pert_in integer,table_num_in integer,text_len_in integer)
    RETURNS void
    LANGUAGE plpgsql

    COST 100
    VOLATILE 
AS $BODY$

declare
v_idx integer := 0;
v_idx_t integer := 0;
v_strTable varchar :=‘‘;
v_strSql varchar :=‘‘;
begin
    while v_idx < add_times_in loop
    v_idx = v_idx+1;
    while v_idx_t < table_num_in loop
    v_idx_t = v_idx_t+1;
    v_strTable = CONCAT(table_,v_idx_t);
    v_strSql = insert into ||v_strTable||(idx,log) select sn,repeat(‘‘a‘‘,||text_len_in||) from generate_series(0,||add_pert_in||,1) as sn;;
    EXECUTE v_strSql;
    end loop;
  end loop;
end

$BODY$;

ALTER FUNCTION public.add_tables_data(integer,integer,integer)
    OWNER TO postgres;

执行如下语句,就会对100个表,进行100批次数据插入,每次每个表插入10行记录,每条记录长200字节

SELECT public.add_tables_data(
100,
10,
100,
200
)

备注:

我这里选择

LANGUAGE ‘plpgsql‘
是为了可以进行调试,如果使用sql的话,postgresql好像不支持调试,有兴趣的可以试一下

(编辑:李大同)

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

    推荐文章
      热点阅读