ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

postgresql数据库批量建数据表

2021-01-03 19:34:39  阅读:316  来源: 互联网

标签:tables postgresql idx 数据库 数据表 table integer 100 public


在数据库中,有时候需要批量建立数据表进行测试,如果要建立的表太多,用直接用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);';
EXECUTE v_strSql;
end loop;
end


$BODY$;

ALTERFUNCTIONpublic.create_tables(integer)
    OWNER TO postgres;

函数使用

SELECT public.create_tables(100)

执行后会建立100个表

分享图片

 

删表函数:

 

-- FUNCTION: public.create_tables(integer)

-- DROP FUNCTION public.create_tables(integer);

CREATEORREPLACEFUNCTIONpublic.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 :=‘‘;
beginwhile 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$;

ALTERFUNCTIONpublic.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,integer)
    OWNER TO postgres;

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

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

分享图片

备注:

我这里选择

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

标签:tables,postgresql,idx,数据库,数据表,table,integer,100,public
来源: https://www.cnblogs.com/actively/p/14226584.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有