openGauss数据导入与导出
openGauss提供了两种主要的数据导入导出工具:
• gsql 的 \copy 元命令:它可以在客户端和服务端之间传输数据,非常灵活。普通用户即可使用,是日常导出的首选方式。
• COPY 命令:是openGauss中最高效的数据导入导出方式,直接在数据库服务端读写文件,需要超级用户权限或调整安全参数,通常用于自动化脚本。
1. 使用\copy元命令导出与导入
\copy 是 gsql 客户端的元命令,它会在客户端本地读写文件,不受服务端COPY安全限制。普通用户即可使用,是日常数据导出导入的首选方式。
例如:导出数据到客户端本地CSV文件
在gsql客户端中,使用\copy命令将数据导出到客户端本地:
db_bike=> \copy db_username.table_name from '/export/table_info.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');
/export/是客户端上的路径,若该目录不存在,需要在客户端机器上手动创建目录并授予写权限(以 root 用户执行):
#1. 创建目录
[root@gauss ~]# mkdir -p /export
#2. 查看 omm 用户所属的用户组(用于 chown)
[root@gauss ~]# id omm
# 输出示例:uid=1001(omm) gid=1001(dbgrp) groups=1001(dbgrp)
#3. 将目录所有者改为 omm,组改为 omm 的主用户组(根据 id 输出确定,本例为 dbgrp)
[root@gauss ~]# chown omm:dbgrp /export
若导出带条件的数据,可执行如下语句:
db_bike=>\copy (SELECT * FROM db_username.t_user WHERE balance > 30) TO '/export/user_balance_gt30.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');
从客户端本地文件导入数据:
db_bike=> \copy db_username.table_name FROM '/local_path/table_info_import.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');
\copy实际上是在客户端执行COPY命令,但文件保存在客户端本地,更方便普通用户使用。
2. 使用COPY命令导出与导入
COPY 命令是openGauss提供的高效数据导入导出方式,直接在数据库服务端读写文件。但注意: 出于安全考虑,openGauss默认禁止普通用户执行 COPY 操作。可使用超级用户(如omm)来操作。
例如:导出到服务器端文件
[omm@gauss ~]$ gsql -d db_bike -p 15400 -r
db_bike=# copy db_username.table_name to '/export/table_info_new .csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');
从服务器端文件导入:
db_bike=# copy db_username.table_name from '/export/table_info_new .csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');
建议仅在自动化脚本或可信环境中使用 COPY,日常交互式操作请使用 \copy。
\copy与COPY的区别:
· COPY是服务端命令,文件路径必须在数据库服务器上,且数据库用户需要有访问该文件的权限。
· \copy是gsql客户端的元命令,文件路径位于客户端机器上。它在内部会通过COPY命令在客户端和服务端之间传输数据。
- 点赞
- 收藏
- 关注作者
评论(0)