百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

PostgreSQL开发与实战(2)常用命令

bigegpt 2025-02-03 11:28 5 浏览

作者:太阳

1、连库相关

#连库
$ psql -h <hostname or ip> -p <端口> [数据库名称] [用户名称]
#连库并执行命令
$ psql -h <hostname or ip> -p <端口> -d [数据库名称]  -U <用户名> -c "运行一个命令;"

备注:

可以将连接命令中的参数在环境变量中指定;
比如环境变量中配置如下,那么执行psql等同于执行psql -h 192.168.56.11 -p 5432 testdb postgres。
export PGDATABASE=testdb
export PGHOST=192.168.56.11
export PGPORT=5432
export PGUSER=postgres

2、一些查看命令

#查看命令语法的帮助命令
\h
#查看有哪些库
\l
#进入指定数据库
\c $db_name
#查看当前库下的所有pattern(表、视图、索引、序列)信息
\d
#查看当前库下的pattern(表、视图、索引、序列)信息,并输出详细内容
\d +
#查看当前库下某张表的结构定义或某个表的索引信息
\d $table_name/$index_name
#只查看当前库下表的信息
\dt
#只查看当前库下的索引信息
\di
#只查看当前库下的序列信息
\ds
#只查看当前库下的视图信息
\dv
#只查看当前库下的函数信息
\df
#列出当前库下所有shcema
\dn
#列出所有的表空间
\db
#列出所有的用户/角色的高级权限
\du或\dg
#列出表/视图/序列及访问它们的相关权限
\dp或\z
#列出默认权限
\ddp

3、修改库名

1.先关闭该库下的连接会话:

# SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity WHERE datname='t1' AND pid<>pg_backend_pid();
 pg_terminate_backend 
----------------------
 t
(1 row)

说明:
pg_terminate_backend:用来终止与数据库的连接的进程id的函数。
pg_stat_activity:是一个系统表,用于存储服务进程的属性和状态。
pg_backend_pid():是一个系统函数,获取附加到当前会话的服务器进程的ID。

2.再用alter修改库名:

# alter database t1 rename to t2;
ALTER DATABASE

4、复制数据库到相同的实例

# 创建targetdb库并将sourcedb库中的数据复制到targetdb
CREATE DATABASE targetdb WITH TEMPLATE sourcedb;

5、schema相关

#查看库下的schema:
  SELECT * FROM information_schema.schemata;
  或者\dn
#创建schema:
  create schema $schema_name;
#创建schema并指定owner用户
  create schema $schame_name authorization $user_name;
#修改schema名称或属主
  alter schema $old_name rename to $new_name;
  alter schema $schema_name owner to $new_owner;
#查看当前所在的schema:
  show search_path;
#切换schema:
  set search_path to $schema_name;
#删除一个空的schema(其中所有对象已被删除):
  drop schema $schema_name;
#删除schema及其中包含的所有对象:
  drop schema $schema_name cascade;

6、查看活跃会话

#查看活跃会话
select * from pg_stat_activity where state<>'idle' ;

#查看包含在事物内的会话
select * from pg_stat_activity where state like '%idle%transaction%';

#查看耗时1s以上的活跃会话
select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ;

pg_stat_activity视图各字段含义:

字段

描述

datid

数据库OID。

datname

数据库名称。

procpid

后端进程的进程ID。(说明:只有4.3版本支持procpid字段。)

pid

后端进程的进程ID。(说明:只有6.0版本支持pid字段。)

sess_id

会话ID。

usesysid

用户OID。

usename

用户名。

current_query

当前正在执行的查询。默认情况下,查询文本最多显示1024个字符,超出部分会被截断,如需显示更多字符,可以通过参数track_activity_query_size配置。(说明:只有4.3版本支持current_query字段。)

query

最近查询的文本。如果state为active,显示当前正在执行的查询。在其他状态下,显示上一个执行的查询。 默认情况下,查询文本最多显示1024个字符,超出部分会被截断,如需显示更多字符,可以通过参数track_activity_query_size配置。(说明:只有6.0版本支持query字段。)

waiting

如果当前SQL在锁等待,值为True,否则为False。

query_start

当前活动查询开始执行的时间。如果state不是active,显示上一个查询的开始时间。

backend_start

当前后端进程的开始时间。

backend_xid

后端进程当前的事务ID。

backend_xmin

后端的xmin范围。

client_addr

客户端的IP地址。如果client_addr为空,表示客户端通过服务器上的Unix套接字连接,或者表示进程是内部进程(例如AUTOVACUUM)。

client_port

客户端和后端通信的TCP端口号。如果使用Unix套接字,值为-1。

client_hostname

客户端主机名,通过client_addr的反向DNS查找报告。

application_name

客户端应用名。

xact_start

当前事务的启动时间。如果没有活动事务,值为空。如果当前查询是第一个事务,值与query_start的值相同。

waiting_reason

当前执行等待的原因,可能是等锁或者等待节点间数据的复制。

state

后端的当前状态,取值范围:active,idle,idle in transaction,idle in transaction (aborted),fastpath function call,disabled。(说明:只有6.0版本支持state字段。)

state_change

上次state状态切换的时间。(说明:只有6.0版本支持state_change字段。)

rsgid

资源组OID。

rsgname

资源组名称。

rsgqueueduration

对于排队查询,查询排队的总时间。

7、kill会话

##kill会话
select pg_terminate_backend($pid);

##只取消当前某一个进程的查询操作,但不能释放数据库连接
select pg_cancel_backend($pid);

8、查看库表大小

##1.查看各库大小:
select datname, pg_size_pretty (pg_database_size(datname)) AS size from pg_database; 

##2.查看当前库下各schema表数量
select schemaname,count(*) from pg_stat_user_tables group by schemaname;

##3.查看当前库下top 20表或去掉limit 20查看所有表大小
select relname,schemaname, pg_size_pretty(pg_total_relation_size(relid)) from pg_stat_user_tables order by pg_total_relation_size(relid) desc limit 20;

##4.查看某张表总大小(表数据+索引数据):
select pg_size_pretty(pg_total_relation_size('xxx')); 

##5.查看表数据大小,不包含索引:
select pg_size_pretty(pg_table_size('xxx')); 

##6.查看表的索引大小:
select pg_size_pretty(pg_indexes_size('xxx'));

9、表字段变更

##1.增加字段:
alter table tbl_name add column col_name [col definer] ;
##2.删除字段:
alter table tbl_name drop column col_name ;
##3.增加约束:
alter table tbl_name add [constraint];
  eg:alter table tbl_name alter column col_name set not null; (非空约束)
##4.删除约束:
alter table tbl_name drop constraint_name; ##(约束名\d+ tbl_name查看)        
##5.修改字段数据类型:
alter table tbl_name alter column col_name [col definer];
  eg:alter table tai alter column name type varchar(500);
##6.重命名字段名称:
alter table tbl_name rename column col_name to col_name_new;

10、pg_ctl

##1.初始化数据库实例
pg_ctl init[db] [-s] [-D datadir] [-o options]

##2.启动、关闭数据库实例等
pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl status [-D datadir]

##3.重新加载配置文件(pg_hba.conf、postgresql.conf等)
pg_ctl reload [-s] [-D datadir]

pg_ctl后缀参数含义,详见官方文档:http://postgres.cn/docs/13/app-pg-ctl.html

11、查看一些信息

##1.查看当前数据库版本信息
select version();
##2.查看数据库的启动时间
select pg_postmaster_start_time();
##3.查看最后load配置文件的时间
select pg_conf_load_time();
备注:使用$pg_ctl reload会改变配置的装载时间
##4.显示当前数据库时区
show timezone;
##5.查看当前用户名
select user;或elect current_user;
##6.查看session用户
select session_user;
##备注:session_user查看的是连接数据库的原始用户,如果中途用set role改变用户角色,用session_user查看的还是原始用户,用user查看的是改变后的用户
##7.查看当前连接的数据库名称
select current_catalog;或select current_database();
##8.查看当前session所在客户端的IP及端口
select inet_client_addr(),inet_client_port();
##9.查看当前数据库服务器的IP地址及端口
select inet_server_addr(),inet_server_port();
##10.查看当前session的后台服务进程的PID
select pg_backend_pid();
11.查看当前参数数值
show xxx;或select current_setting('xxx');
12.修改当前session的参数配置
set xxx to 'xxx';或select set_config('xxx','xxx',false);
13.查看当前正在写的WAL文件
select pg_xlogfile_nale(pg_current_xlog_location());
14.查看当前WAL文件的buffer还有多少字节没有写入磁盘
select pg_xlog_location_diff(pg_current_xlog_insert_location(),pg_current_xlog_location());
15.查看数据库实例是否正在做基础备份
select pg_is_in_backup(),pg_backup_start_time();
16.查看当前数据库实例处于Hot Standby状态还是正常数据库状态
select pg_is_in_recovery();
备注:如果结果为真,则为Hot Standby状态
17.查看表对应的数据文件
select pg_relation_filepath('xxx');

更多技术信息请查看云掣官网云掣YunChe - 可观测运维专家 | 大数据运维托管 | 云MSP服务

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...