postgresql使用psql.exe命令行快速导入Excel(csv)数据

      最近遇到一个需求,定时把csv文件导入到postgresql数据库,csv文件中包含几万行数据。查询到可以用命令行导入,使用的是命令行工具psql.exe文件,可是在操作的过程中无法实现自动输入口令这个环节。经过反复寻找资料,找到了解决方法,那就是把口令放在环境变量里。使用 set PGPASSWORD=xxxx,这是是预存储登录口令,写在命令行里,由于这样写有会暴露数据库访问的用户和口令,具有很大的安全风险,批处理的访问权限应严格控制。

      我使用的是windows2008,故按照windows系统的习惯来设置环境变量。

       首先要把psql.exe所在的路径追加到windows系统的环境变量path里,保证psql.exe运行正常。

      假定服务器在本地127.0.0.1,用户为 user001,口令是:123456,数据库是kmsdb,则批处理

test.bat的内容如下,先测试数据库的连接:

set PGPASSWORD=123456

psql.exe -h 127.0.0.1 -U user001 -d kmsdb

显示

kmsdb=#

说明正确登陆到了数据库。在此时输入\q回车,退出psql命令行状态。

然后,正式构建命令行

对于psql.exe   -c选项是运行一个命令或查询,然后退出。

需求分析:要导入的csv文件是  test.csv,另存为utf-8格式,可以减少很多麻烦,目标数据表名为 test_csv,导入前要清空数据表。

构造从客户端复制数据到数据表的指令  \copy...from...

建立批处理文件 test.bat,内容如下:

set PGPASSWORD=123456

psql.exe -h 127.0.0.1 -U user001 -d kmsdb -c  "truncate table test_csv"

psql.exe -h 127.0.0.1 -U user001 -d kmsdb -c  "\COPY  test_csv FROM  'd:\log_csv\test.csv'  WITH (FORMAT 'csv' ,  HEADER,  ESCAP '|',  ENCODING 'utf-8') "

 默认分割符是逗号,这里就不列出了。要加上就写  DELIMITER ',',加在上面选项里。

注意语法要点:

1.  \copy 为psql.exe中客户端文件发送到服务端的命令,能够处理FORMAT是text, csv或binary的文件。

2.  WITH后面加选项,选项放在括号里,通过逗号隔开。

你可能感兴趣的:(命令行操作,postgresql)