irpas技术客

postgresql命令行的基本操作_surpassLiang_postgresql 命令行

大大的周 2390

1. 前言

目前能连接postgresql的数据库很多,我们可以通过诸如Navicat等软件可以很方便的操作数据库。然而,当我们身在客户现场,一个不允许随便导入资料的客户现场,他们给我的只有命令行界面,即使有个win7客户端,也没有诸如Navacat等链接数据库的软件。此时,我们就需要借助命令行实现数据的查询。

2. 环境准备

基于docker部署的postgresql数据库

3.基本操作 3.1 进入容器

当然,这属于docker的一些基本操作。

# 查询postgresql容器id,postgresql根据自己的容器id决定 docker ps|grep postgresql b21c50c12547 192.168.5.163:5000/gv_pg:0.1 "docker-entrypoint.s…" 5 days ago Up 5 days 5432/tcp icenter_base_postgis.1.2eiuftp32szq1zp1dz257bdic # 进入容器 docker exec -it b21c50c12547 sh sh-4.2# 3.2 进入psql环境

按照上述命令是以root用户进入docker容器,我们直接通过psql是不可以的,如下代码给出的提示:

[root@node163 home]# docker exec -it b21c50c12547 sh sh-4.2# psql psql: error: FATAL: role "root" does not exist

根据上面的提示,我们需要通过postgres用户进入数据库,这里我们有两种方式进入数据库

方式一psql -U postgres 方式二su postgres psql

针对上述两种方式,我认为方式一比较好,因为他是全程在root用户下操作的,即使后面退出数据库,我们仍然在root用户下,对于操作一些资源文件还是很方便的。方式二要是在切换到root账户,如果不知道root的密码,还是很麻烦的一件事。

3.3 查看所有的数据库 postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -------------------+----------+----------+------------+------------+----------------------- manager | postgres | UTF8 | en_US.utf8 | en_US.utf8 | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template_postgis | postgres | UTF8 | en_US.utf8 | en_US.utf8 | (5 rows) 3.4 进入指定数据库 postgres=# \c manager You are now connected to database "manager" as user "postgres". manager=#

通过上面的代码以及提示,我们知道=#前面表示的是当前所属数据库

3.5 查询当前数据库的表格 manager=# \dt List of relations Schema | Name | Type | Owner --------+----------------------+-------+---------- public | base_image | table | postgres public | command_info | table | postgres public | hbase_config_info | table | postgres public | hbase_host_info | table | postgres public | mongodb_config_info | table | postgres public | mongodb_host_info | table | postgres public | mount_info | table | postgres public | service_info | table | postgres public | service_info_2 | table | postgres public | service_port_mapping | table | postgres (10 rows) 3.6 查询数据库表的字段列表 manager=# \d base_image; Table "public.base_image" Column | Type | Collation | Nullable | Default ------------+------------------------+-----------+----------+---------------------------------------- id | integer | | not null | nextval('base_image_id_seq'::regclass) image_desc | character varying(255) | | | name | character varying(255) | | | Indexes: "base_image_pkey" PRIMARY KEY, btree (id)

这里需要注意的是,千万不要省略最后的;号。

3.7 查询数据库数据 manager=# select * from base_image; id | image_desc | name ----+-----------------+--------------------- 1 | node | node:8.15.0 2 | centos-jre-gdal | centos-jre-gdal:0.1 (2 rows)

这里需要注意的是,千万不要省略最后的;号,不然你是查询不到任何结果的:

manager=# select * from base_image manager-# 3.8 导出数据

这个技巧也是本次写这篇文章主要记录的内容,这里主要涉及两点:

如何将查询结果记录到文件中如何将文本拷贝到本地(注意,此时我们还在容器中操作) 3.8.1 输出文件内容

这里主要有两种方式输出文件内容,一种是他会记录所有的输出信息到txt脚本,另外一种是将查询结果输出到csv中(这个文件的查看需要借助excel软件。

3.8.1.1 输出txt文件 manager-# \o /tmp/data0809.txt manager-# \l manager-# \c postgres You are now connected to database "postgres" as user "postgres". postgres-# \dt postgres=# select * from base_map; postgres=# \o

这里最重要的是\o 文件名称 +输出内容 + \o。通过上面的输出结果,我们可以查看生成文件的内容:

sh-4.2# cat data0809.txt List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -------------------+----------+----------+------------+------------+----------------------- manager | postgres | UTF8 | en_US.utf8 | en_US.utf8 | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template_postgis | postgres | UTF8 | en_US.utf8 | en_US.utf8 | (19 rows) List of relations Schema | Name | Type | Owner --------+--------------------------+-------+---------- public | base_map | table | postgres public | base_map_permission | table | postgres public | spatial_ref_sys | table | postgres tiger | addr | table | postgres tiger | addrfeat | table | postgres tiger | bg | table | postgres tiger | county | table | postgres tiger | county_lookup | table | postgres tiger | countysub_lookup | table | postgres tiger | cousub | table | postgres tiger | direction_lookup | table | postgres tiger | edges | table | postgres tiger | faces | table | postgres tiger | featnames | table | postgres tiger | geocode_settings | table | postgres tiger | geocode_settings_default | table | postgres tiger | loader_lookuptables | table | postgres tiger | loader_platform | table | postgres tiger | loader_variables | table | postgres tiger | pagc_gaz | table | postgres tiger | pagc_lex | table | postgres tiger | pagc_rules | table | postgres tiger | place | table | postgres tiger | place_lookup | table | postgres tiger | secondary_unit_lookup | table | postgres tiger | state | table | postgres tiger | state_lookup | table | postgres tiger | street_type_lookup | table | postgres tiger | tabblock | table | postgres tiger | tract | table | postgres tiger | zcta5 | table | postgres tiger | zip_lookup | table | postgres tiger | zip_lookup_all | table | postgres tiger | zip_lookup_base | table | postgres tiger | zip_state | table | postgres tiger | zip_state_loc | table | postgres (36 rows) base_map_id | auth_state | data_id | gridset | id | image_id | layer_name | map_default | max_level | maxx | maxy | mime_type | min_level | minx | miny | tile_layer_type | tile_status | tile_type | tmsurl | transparent_color | url | user_id | valid_area | wmsurl | wmtsurl | workspace -------------+------------+---------+---------+----+----------+------------+-------------+-----------+------+------+-----------+-----------+------+------+-----------------+-------------+-----------+--------+-------------------+-----+---------+------------+--------+---------+----------- (0 rows) 3.8.1.2 输出csv文件 gv_permission=# copy (select * from base_user) to '/tmp/userInfo.csv' with csv header; COPY 4

此时在tmp下会多出一个userInfo.csv文件

3.8.2 将文件拷贝到本地 在客户端命令行,注意是容器外,执行如下命令(这也是docker的基本操作)docker cp b21c50c12547:/tmp/userInfo.csv /home 后面也可以将此文件拷贝到客户端桌面,这里就不作过多解释。 3.8.3 csv文件打开

当我们把导出的csv文件打开时候,发现里面是乱码: 这是因为excel要求是以GBK的形式打开,而当前文件的格式是utf-8,所以转换一下格式即可。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #postgresql #命令行 #1 #2