postgresql技巧之命令导出表(csv格式)

有时候我们需要导出某个表,但是又不能用Navicat等直接连接数据库,那么就可以使用COPY命令来导出表;

一、登录postgresql

其需要先在数据库服务器上切换账户并进入postgresql下

[root@localhost ~]# su - postgres
Last login: Sun Apr 28 18:11:32 CST 2019 on pts/0
[postgres@localhost ~]$ psql
psql (9.2.23, server 9.5.11)
WARNING: psql version 9.2, server version 9.5.
         Some psql features might not work.
Type "help" for help.

postgres=# 

二、进行导出

而后即可使用命令来进行导出了;
标准写法范例如下:

copy lty_dispatch_operation_logs to "/usr/etc/lty_dispatch_operation_logs.csv" with csv header;

此写法中lty_dispatch_operation_logs为数据库表名,"/usr/etc/lty_dispatch_operation_logs.csv"为要导入到的文件的路径,注意此文件所在父目录必须存在

1、高级用法一–使用查询

这里也是可以使用查询语句的,即把上面例子中的lty_dispatch_operation_logs改为查询语句即可,但是要用()包围起来,如下所示:

copy (select * from scheduleplan_execdownplanitem where starttime between '2019-04-16 20:00:00' and '2019-04-17 23:59:59') to '/usr/etc/scheduleplan_execdownplanitem.csv' with csv header;

2、高级用法二–远程导出

在前面的用法中导出后需要在用scp或者ftp等方法把导出的数据拷贝到本地等;
那么有没有直接在本地导出的方法呢?有的,如下所示:

psql --dbname=my_db_name --host=db_host_ip --username=my_username -c "COPY (select id as COL_ID, name as COL_NAME from my_tab order by id) TO STDOUT with csv header" > D:/client_exp_dir/file_name.csv

范例:

psql -h 172.20.1.124 -p 5432 -U smartsys -d smartsys -o e:\test2.cvs -c “select * from obj_dev;

注意:此处无需先登录postgresql;

三、退出postgresql

使用如下命令退出登录:

postgres=# \q
[postgres@localhost ~]$ exit
logout
[root@localhost ~]# 

你可能感兴趣的:(postgresql,PostgreSQL)