租户进行数据导入,使用pw_bulkload操作时遇到如下两类问题:
- 提示找不到vbbl这个schema
- 提示vbbl这个schema没有权限
提示的文本信息如下:
NOTICE: BULK LOAD START
ERROR: query failed: ERROR: schema "vbbl" does not exist
DETAIL: query was: SELECT * FROM vbbl.pw_bulkload($1)
NOTICE: BULK LOAD START
ERROR: query failed: ERROR: permission denied for schema vbbl
DETAIL: N/A
DETAIL: query was: SELECT * FROM vbbl.pw_bulkload($1)
对应的截图如下:


带着上面两个问题,本文进行pw_bulkload工具的使用介绍。
pw_bulkload简介
pw_bulkload是PanWeiDB提供的一款批量加载数据的工具,使用该工具可以提升加载的效率和性能。相比copy命令速度更快,能够跳过shared buffer、wal buffer直接写文件。
同时该工具还提供了出错清理功能,数据导入出错之后,本次导入的数据都要进行回滚,所以需要将本次导入数据清理,防止这些数据被访问,造成查询、执行计划不准确等问题。
pw_bulkload示例
1.首先在db下使用管理员权限账号创建pw_bulkload扩展
CREATE EXTENSION pw_bulkload;
通常连接默认管理库postgres,如果在其他db下使用,也需要在相应的db下执行该操作,否则会出现上面的第1个错误:找不到vbbl这个schema
2.在db下对普通用户赋予vbbl模式的usage权限,使其可调用后续的接口函数
GRANT usage ON SCHEMA vbbl TO admin;
如果不执行该步骤,会出现上面的第2个错误:提示vbbl这个schema没有权限
3.使用pw_bulkload的命令项加载数据
创建测试表
CREATE TABLE test_bulkload(id INT, name VARCHAR);
创建txt文件,写入10个W数据:
$ seq 100000| awk '{print $0"|bulkload"}' > bulkload_output.txt
最后执行如下命令:
$ pw_bulkload \
--input=./bulkload_output.txt \
--output="admin.test_bulkload" \
--option="TYPE=csv" --option="DELIMITER=|" \
--option="ERROR_RECOVERY=YES" \
--port=17700 --dbname=postgres --username=admin --password
注意:
1.连接到哪个db进行操作,就需要在哪个db下创建扩展
2.output参数表名要加模式前缀
3.设置ERROR_RECOVERY=YES,在导入出错时清理本次导入数据。
成功导入的截图如下:

查看数据:

4.使用pw_bulkload的控制文件加载数据
可以先清空导入的数据
TRUNCATE TABLE test_bulkload ;
编写.ctl文件
INPUT=/home/panwei/bulkload_output.txt
OUTPUT = admin.test_bulkload
TYPE = CSV
DELIMITER = |
ERROR_RECOVERY=YES
执行命令:
$ pw_bulkload ./my.ctl \
--port=1521 --dbname=postgres --username=admin --password
最后修改时间:2024-02-26 14:05:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




