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( 备注:我这里选择
LANGUAGE ‘plpgsql‘
是为了可以进行调试,如果使用sql的话,postgresql好像不支持调试,有兴趣的可以试一下
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |