pgsql使用copy命令导入CSV文件到数据库,方便实现远程定时导入

表结构:

csv文件(这里以逗号分隔,第一行是列名,不需要导入):

 

1. 通过psql命令,登录postgresql:

登录命令格式:

psql -h ip地址 -p 端口号 -U 用户名 -d 数据库名

示例:

psql -h 192.168.58.132 -p 35432 -U postgres -d npas

指定或切换schema命令格式:

set search_path to schema名称;

示例:

set search_path to npas;

2. 导入csv文件:

文件所在路径:

/root/document/csv/table_aaa.csv

命令行导入csv文件

格式:(header表示带表头的,如果不带表头则不用加header)

\copy 数据表名 from '文件路径+文件名' with 文件后缀 header delimiter '分隔符' encoding '编码格式';

示例:

\copy tbl_a from '/root/document/csv/table_aaa.csv' with csv header delimiter ',' encoding 'UTF8';

执行后:

======================================================================================

参考文章:

linux命令 postgre客户端执行语句
psql “host=主机名 hostaddr=主机IP地址 port=端口 dbname=数据库 user=用户名 password=密码” -c "\copy test_1 from ‘/data/test.csv’ delimiter ‘|’ csv "
例:
psql “host=192.168.0.1 hostaddr=192.168.0.1 port=5432 dbname=test user=root password=root” -f /data/pgsql_copy.sql

linux命令 postgre客户端执行脚本
psql “host=主机名 hostaddr=主机IP地址 port=端口 dbname=数据库 user=用户名 password=密码” -f 执行脚本文件名地址
例:
psql “host=192.168.0.1 hostaddr=192.168.0.1 port=5432 dbname=test user=root password=root” -f /data/pgsql_copy.sql

注释:
"host=主机名 hostaddr=主机IP地址 port=端口 dbname=数据库 user=用户名 password=密码" :使用该方式主要实现免密登录
-f <文件名> : 执行一个文件中的查询,然后退出
执行脚本:主要放置copy脚本
如:pgsql_copy.sql:
\copy test_1 from ‘/data/test.csv’ delimiter ‘|’ csv
注意:test_1 表需要存在

下面是关于copy命令的一些简单说明:
copy 命令始终是到数据库服务端找文件,以超级用户执行导入导出权限要求很高,适合数据库管理员操作;
\copy 命令可在客户端执行导入客户端的数据文件,权限要求没那么高,适合开发人员,测试人员使用。
导入:
COPY table_name [ ( column_name [, …] ) ]
FROM { ‘filename’ | PROGRAM ‘command’ | STDIN }
[ [ WITH ] ( option [, …] ) ]
导出:
COPY { table_name [ ( column_name [, …] ) ] | ( query ) }
TO { ‘filename’ | PROGRAM ‘command’ | STDOUT }
[ [ WITH ] ( option [, …] ) ]
where option can be one of:
FORMAT format_name
OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER ‘delimiter_character’
NULL ‘null_string’
HEADER [ boolean ]
QUOTE ‘quote_character’
ESCAPE ‘escape_character’
FORCE_QUOTE { ( column_name [, …] ) | * }
FORCE_NOT_NULL ( column_name [, …] )
ENCODING ‘encoding_name’

FORMAT:指复制到文件的文件类型,如:CSV,TEXT。
OIDS :指复制到文件时带上oid,但是当某个表没有oid时就会出错。
FREEZE :冻结数据,然后执行VACUUM FREEZE。
DELIMITER:指在导出文件时的分隔符指定需要用单引号。在TEXT时默认为tab,CSV文件默认是逗号。不支持binary文件格式。
HEADER:指在复制到文件时带上表字段名称。
NULL:指定null值,默认为\N。
ENCODING:指定文件的编码,如果没有指定就默认使用客户端的字符集。
STDIN:指的是客户端程序的输入流。
STDOUT:指向是客户端的输出流。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenLeungX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值