Linux服务安装PostgreSQL客户端

1,010 阅读3分钟

场景: 客户的pg数据库安装在内容,之前操作通过客户远程windows系统上客户端连接查看数据库和表结构信息,项目结束后客户取消window客户端,但运维过程中有新的临时需求,需要查看相关pg表结构信息,需要在linux应用服务器上临时安装pg客户端,并通过内网远程连接pg数据库。

基本安装步骤流程如下

  1. 确认对应pg版本的安装包(项目中pg版本是12)
  2. 选择合适的客户端安装包(主要下载postgresql和postgresql-libs包即可),下载地址:

  yum.postgresql.org/12/redhat/r…

进入页面后,点击下方链接

Image.png

查看到server端分为多个子包,下载下列两个包

Image.png

  1. 下载完成后,将对应两个安装包上传到linux指定目录,并执行相关安装命令 ,先安装libs包
rpm -i postgresql12-libs-12.12-1PGDG.rhel7.x86_64.rpm

    rpm -i postgresql12-12.12-1PGDG.rhel7.x86_64.rpm

    安装过程报警信息可忽略

warning: postgresql12-12.12-1PGDG.rhel7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY

  1. 验证结果 执行psql命令,未报命令不存在信息,说明安装成功。

Image.png

说明

postgresql12 - PostgreSQL 客户端程序和依赖包,官网包的详细描述中有说明

postgresql12-contrib - PostgreSQL 发布的源代码和二进制文件

postgresql12-libs - PostgreSQL 客户端依赖的公共包,pg的基础包,跟pg相关程序都需要安装

postgresql12-server - PostgreSQL 的服务端程序代码

以上是基本安装流程,最后整理常用的sql语句,供查询使用:

远程数据库连接psql -h 172.31.102.21 -p XXX -d handle -U XXX -W
查看所有数据库 \l
查看当前库所有表 \d
查看表定义\d handle.prefixes其他schema下表需带schema前缀
查看XXXX表大小select pg_relation_size('XXXX');
查看表的总大小,包括索引大小select pg_size_pretty(pg_total_relation_size('test'));
以KB,MB,GB的方式来查看表大小select pg_size_pretty(pg_relation_size('test'));
查看当前schemashow search_path
切换schema-当前连接set search_path to XXX如果不切换,则访问表名需添加schema前缀,如:_Yschema.tablename
调整数据库schemaalert database 'XXX' set search_path to XXXX默认是public
查看当前数据库所有索引\di
查看单个索引大小select pg_size_pretty(pg_relation_size('parent_pkey'));
查看所有表空间select spcname from pg_tablespace
查看表空间大小select pg_size_pretty(pg_tablespace_size('pg_default'));
查看表字段信息SELECT    c.relname 表名称,    A.attname AS 字段名称,    col_description(A.attrelid,A.attnum) AS 注释,    format_type ( A.atttypid, A.atttypmod ) AS 类型,    CASE WHEN A.attnotnull='f' THEN '否' ELSE '是' END AS 是否必填,    a.attnum 序号FROM    pg_class AS c,    pg_attribute AS aWHERE    A.attrelid = C.oid    AND A.attnum > 0    ORDER BY c.relname,a.attnum;示例:SELECT  c.relname 表名称,  A.attname AS 字段名称,  split_part(col_description ( A.attrelid, A.attnum ),':',1) AS 注释,  format_type ( A.atttypid, A.atttypmod ) AS 类型,  CASE WHEN A.attnotnull='f' THEN '否' ELSE '是' END AS 是否必填,  a.attnum 序号FROM  pg_class AS c,  pg_attribute AS aWHERE  c.relnamespace=16389  AND c.relname not like 'v_%'  AND c.relname not like 'pk_%'  AND c.relname not like 'unidx%'  AND c.relname not like '%_index'  AND c.relname not like '%_seq'  AND c.relname not like '%_pkey'  AND A.attrelid = C.oid  AND A.attnum > 0  ORDER BY c.relname,a.attnum;效果:
查询数据库中所有表名SELECT   tablename   FROM   pg_tables  WHERE   tablename   NOT   LIKE   'pg%'  AND tablename NOT LIKE 'sql_%'ORDER   BY   tablename;
### .获取数据库中所有table名及table的注解信息SELECT   tablename,obj_description(relfilenode,'pg_class')  FROM   pg_tables  a, pg_class bWHERE   a.tablename = b.relnameand a.tablename   NOT   LIKE   'pg%'  AND a.tablename NOT LIKE 'sql_%'ORDER   BY   a.tablename;
### 查询字段名、字段类型及字段长度和字段注释select a.attnum,a.attname,concat_ws('',t.typname,SUBSTRING(format_type(a.atttypid,a.atttypmod) from '(.*)')) as type,d.description from pg_class c, pg_attribute a , pg_type t, pg_description dwhere  c.relname = 'table_name' and a.attnum>0 and a.attrelid = c.oid and a.atttypid = t.oid and  d.objoid=a.attrelid and d.objsubid=a.attnum
### 获取表中字段名及字段注解 SELECT col_description(a.attrelid,a.attnum) as comment,format_type(a.atttypid,a.atttypmod) as type,a.attname as name, a.attnotnull as notnullFROM pg_class as c,pg_attribute as awhere c.relname = 'tablename' and a.attrelid = c.oid and a.attnum>0