有时候我们需要导出某个表,但是又不能用Navicat等直接连接数据库,那么就可以使用COPY命令来导出表;
postgresql_1">一、登录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_41">三、退出postgresql
使用如下命令退出登录:
postgres=# \q
[postgres@localhost ~]$ exit
logout
[root@localhost ~]#