暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

Postgresql常用管理命令

查看系统信息

查看当前数据库实例的版本信息:

select version();

查看数据库的启动时间:

select pg_postmaster_start_time();

使用pg_ctl reload后会改变配置的装载时间。查看最后load配置文件的时间:

select pg_conf_load_time();

显示当前数据库时区:

show timezone;

注意, 数据库的时区有时并不是当前操作系统的时区, 此时在数据库中看到的时间就与在操作系统中看到的不一致。
显示当前数据库时间:

select now();

查看当前实例中有哪些数据库:

\l

查看当前用户名:

select user;
select current_user;

查看session用户:

select session_user;

通常情况下“session_user”与“user”是相同的。
但当用命令“SET ROLE”改变用户的角色时, 这两者就不同了,session_user始终是原始用户, 而user是当前的角色用户。

查询当前连接的数据库名称:

select current_catalog;
select current_database();

使用current_catalog与current_database()都显示当前连接的数据库名称, 两者的功能完全相同, 只不过catalog是SQL标准中的用语。

查询当前session所在客户端的IP地址及端口:

select inet_client_addr(),inet_client_port();

查询当前数据库服务器的IP地址及端口:

select inet_server_addr(),inet_server_port();

查询当前session的后台服务进程的PID:

select pg_backend_pid();

通过操作系统命令查看此后台服务进程:

ps -ef|grep pid号 |grep -v grep

查看当前参数配置情况,如查看shared_buffers参数:

show shared_buffers;
select current_setting('shared_buffers');

修改当前session的参数配置:

set maintenance_work_mem to '128MB';
SELECT set_config('maintenance_work_mem', '128MB', false);

查看当前正在写的WAL文件:

select pg_xlogfile_name(pg_current_xlog_location());

查看当前WAL文件的buffer中还有多少字节的数据没有写入磁盘中:

select pg_xlog_location_diff(pg_current_xlog_insert_location(), pg_current_xlog_location());

查看数据库实例是否正在做基础备份:

select pg_is_in_backup(), pg_backup_start_time() ;

查看当前数据库实例处于Hot Standby状态还是正常数据库状态:

select pg_is_in_recovery();

如果上面命令的运行结果为真, 说明数据库处于Hot Standby状态。

查看数据库的大小:

select pg_database_size('osdba'), pg_size_pretty(pg_database_size('osdba'));

上面的命令用于查看数据库“osdba”的大小。
注意, 如果数据库中有很多表, 使用上述命令查询将比较慢, 也可能对当前系统产生不利的影响。
在上面的命令中, pg_size_pretty()函数会把数字以MB、 GB等格式显示出来, 这样的结果更加直观。

查看表的大小:

select pg_size_pretty(pg_relation_size('t1')) ;
select pg_size_pretty(pg_total_relation_size('t1')) ;

上例中, pg_relation_size()仅计算表的大小, 不包括索引的大小, 而pg_total_relation_size()则会把表上索引的大小也计算进来。

查看表上所有索引的大小:

select pg_size_pretty(pg_indexes_size('t1'));

注意, pg_indexes_size()函数的参数名是一个表对应的OID(输入表名会自动转换成表的OID) , 而不是索引的名称。

查看表空间的大小:

select pg_size_pretty(pg_tablespace_size('pg_global'));
select pg_size_pretty(pg_tablespace_size('pg_default'));

上面的示例中查看了全局表空间“pg_global”和默认表空间“pg_default”的大小。

查看表对应的数据文件:

select pg_relation_filepath('test01');

系统维护常用命令

修改配置文件“postgresql.conf”后, 要想让修改生效, 有以下两种方法。

  • 方法一: 在操作系统下使用如下命令:
pg_ctl reload
  • 方法二: 在psql中使用如下命令:
select pg_reload_conf();

注意, 如果是需要重启数据库服务才能使修改生效的配置项, 使用上面的方法无效。
使用上面的方法能使修改生效的配置项都是不需要重启数据库服务就能使修改生效的配置项。

切换log日志文件到下一个:

select pg_rotate_logfile();

切换WAL日志文件:

select pg_switch_xlog();

手动产生一次checkpoint:

checkpoint;

取消正在长时间执行的SQL命令的方法有以下两种。

  • pg_cancel_backend(pid): 取消一个正在执行的SQL命令。
  • pg_terminate_backend(pid): 终止一个后台服务进程, 同时释放此后台服务进程的资源。

这两个函数的区别是, pg_cancel_backend()函数实际上是给正在执行的SQL任务置一个取消标志, 正在执行的任务在合适的时候检测到此标志后会主动退出; 但如果该任务没有主动检测到此标志就无法正常退出, 此时就需要使用pg_terminate_backend命令来中止SQL命令的执行。

通常先查询pg_stat_activity以找出长时间运行的SQL命令, 命令如下:

select pid,usename,query_start, query from pg_stat_activity;

然后再使用pg_cancel_backend()取消该SQL命令, 如果pg_cancel_backend()取消失败,再使用pg_terminate_backend(), 命令如下:

select pg_cancel_backend(pid号);
select pg_terminate_backend(pid号);
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论