简介
由于目前金融行业普通存在信创国产化需求,外围系统数据后台多转为以轻量级开源,国产化为主的数据库系统,但是由于核心迁移的风险性,核心系统仍多为DB2,Oracle等数据库,如果进行核心系统和外围系统数据交互,是信创环境目前面临的一个问题。
区别于复杂的ELT实现数据挖掘,或者付费第三方工具异构转换工具,通过文本文件可以轻松的实现异构数据库的数据沟通,存在风险低,技术含量低,无额外费用的优势,本文在此基础上,介绍一种可以基于Mogdb数据库动态加载文本文件到制定表的数据加载方式。
实现流程
1、创建测试数据
--创建测试表
create table t1 (id int);
insert into t1 select generate_series(1,100);
copy (select * from t1) to '/tmp/t1.dat' with (delimiter ',', encoding 'GBK');
copy (select * from t1) to '/tmp/t2.dat' with (delimiter ',', encoding 'UTF8');

--创建导入表
create table gjyw.t2 as select * from gjyw.t1 where 1=0;

2、配置参数
该参数可以使sysadmin权限的用户使用copy命令替代\copy命令
--配置参数
--参数说明:
gs_guc reload -I all -N all -c "enable_copy_server_files=on";
gsql -d postgres -p 51000 -c "show enable_copy_server_files"

3、创建函数
--创建函数
--函数实现通过制定多个参数,使用copy函数进行数据对制定表的数据导入
--exception异常抛出连用,否则会报错
create or replace procedure p_copy1(p_filename in varchar,p_tableschema in varchar,p_tablename in varchar,p_delimiter in varchar,p_encoding in varchar)
package
as
declare
v_sql varchar(2000);
begin
--p_filename:cvs文件名称
--p_tableschema:表的schema
--p_tablename:表名
--p_delimiter:分隔符
--p_encoding:字符集
v_sql := 'copy '||p_tableschema||'.'||p_tablename||' from '''||p_filename||''' with (delimiter '''|| p_delimiter ||''',encoding '''||p_encoding||''');';
raise notice 'v_sql:%', v_sql;
execute immediate v_sql;
end;
/
4、调用函数,并查看结果
--调用函数
call p_copy1('/tmp/t1.csv','gjyw','t2',',','GBK');
call p_copy1('/tmp/t2.csv','gjyw','t2',',','UTF8');
--查看数据
select count(*) from t2;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




