一、数据库常用命令
1、查看数据库版本
highgo=# select kernel_version();kernel_version
----------------------------------------------------------------------------------------------------------------
PostgreSQL 9.4.11 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17), 64-bit
(1 row)
highgo=# select version();
version
------------------------------------
HighGo Database 3.1.4 Linux 64-bit
(1 row)
2、查看数据库启动时间
highgo=# select pg_postmaster_start_time();
pg_postmaster_start_time
-------------------------------
2017-07-19 08:50:48.399154+08
(1 row)
3、查看最后load配置文件的时间
highgo=# select pg_conf_load_time();
pg_conf_load_time
-------------------------------
2017-07-19 08:50:48.297432+08
(1 row)
使用pg_ctl reload改变配置的装载时间,如下:
[highgo@sourcedb ~]$ pg_ctl reload
server signaled
[highgo@sourcedb ~]$ psql
psql (3.1.4)
Type "help" for help.
highgo=# select pg_conf_load_time();
pg_conf_load_time
-------------------------------
2017-07-19 13:52:44.025067+08
(1 row)
4、显示当前数据库时区
highgo=# show timezone;
TimeZone
----------
PRC
(1 row)
当数据库中的时区和操作系统的时区不一致时,在数据库中查看到的时间和操作系统的时间是不一样的。
date和select now()的结果不一致。
5、查看当前用户名
highgo=# select user;
current_user
--------------
highgo
(1 row)
highgo=# select current_user;
current_user
--------------
highgo
(1 row)
highgo=# select session_user;
session_user
--------------
highgo
(1 row)
highgo=# set role test;
SET
highgo=> select session_user;
session_user
--------------
highgo
(1 row)
highgo=> select current_user;
current_user
--------------
test
(1 row)
6、查看当前连接的数据库名称
highgo=> select current_catalog,current_database();
current_database | current_database
------------------+------------------
highgo | highgo
(1 row)
highgo=> \conninfo
You are connected to database "highgo" as user "highgo" via socket in "/tmp" at port "5866".
7、查案当前session所在客户端的IP地址和端口,本机查询不显示
highgo=> select inet_client_addr(),inet_client_port();
inet_client_addr | inet_client_port
------------------+------------------
|
(1 row)
highgo=> select inet_server_addr(),inet_server_port();
inet_server_addr | inet_server_port
------------------+------------------
|
(1 row)
8、查看当前session的后台服务进程的pid
highgo=> select pg_backend_pid();
pg_backend_pid
----------------
12644
(1 row)
9、查看当前正在写的WAL文件,命令如下
highgo=> select pg_xlogfile_name(pg_current_xlog_location());
pg_xlogfile_name
--------------------------
00000002000000000000005D
(1 row)
查看当前WAL的buffer中还有多少字节的数据没有写到磁盘中,命令如下:
highgo=> select pg_xlog_location_diff(pg_current_xlog_insert_location(),pg_current_xlog_location());
pg_xlog_location_diff
-----------------------
0
(1 row)
查看数据库实例是否正在做基础备份:
highgo=> select pg_is_in_backup(),pg_backup_start_time();
pg_is_in_backup | pg_backup_start_time
-----------------+----------------------
f |
(1 row)
查看当前数据库时Hot Standby状态还是正常数据库状态:
highgo=> select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)
10、查看数据库的大小
highgo=> select pg_database_size('highgo'),pg_size_pretty(pg_database_size('highgo'));
pg_database_size | pg_size_pretty
------------------+----------------
7788184 | 7606 kB
(1 row)
如果数据库中得标很多,也可能对当前系统产生不利的影响。上面命令中,pg_size_pretty会把数字以MB、GB的格式显示出来,
这样会更直观。
查看表的大小:
highgo=> select pg_size_pretty(pg_relation_size('test'));
pg_size_pretty
----------------
8192 bytes
(1 row)
highgo=> select pg_size_pretty(pg_total_relation_size('test'));
pg_size_pretty
----------------
24 kB
(1 row)
pg_relation_size()仅计算表的大小,不包含索引的大小;pg_total_relation_size()将表上索引的大小也计算进来。
查看表上所有索引的大小:
highgo=> select pg_size_pretty(pg_indexes_size('test'));
pg_size_pretty
----------------
16 kB
(1 row)
注意:pg_indexes_size()函数的参数名时一个表对应的oid(输入表名会自动换换成表的oid),而不是索引的名称。
11、查看表空间的大小
highgo=# select pg_size_pretty(pg_tablespace_size('pg_global'));
pg_size_pretty
----------------
461 kB
(1 row)
12、查看表对应的数据文件
highgo=# select pg_relation_filepath('test');
pg_relation_filepath
----------------------
base/13010/24824
(1 row)
二、系统维护常用命令
1、修改psotgresql.conf后,让参数生效的方法
[highgo@sourcedb ~]$ pg_ctl reload
或者
highgo=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
注意:如果需要重启数据库服务的配置项,修改后用上面的防范并不能使之生效。能生效的配置项都不需要重启数据库服务的。
2、切换log日志到下一个文件
highgo=# select pg_rotate_logfile();
pg_rotate_logfile
-------------------
t
(1 row)
3、切换WAL日志文件
highgo=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/5D003810
(1 row)
4、手工生成一次检查点
highgo=# checkpoint;
CHECKPOINT
5、取消一个正常长时间执行的sql 的方法
有两个函数可以完成这个功能:
(1)pg_cancel_backend(pid):取消一个正在执行的SQL
(2)pg_terminate_backend(pid):终止一个后台服务进程,同时释放此后台服务进程的资源。
这两个函数的区别:pg_cancel_backend()实际上是给正在执行的SQL任务配置一个取消标志,正在执行的任务在合适的时候检测到此标志后会主动退出;
但如果这个任务没有主动检测到这个标志,则该任务就无法正常退出,这时需要使用pg_terminate_backend()命令来终止SQL的执行。
通常是先查询pg_stat_activity,视图找出长时间运行的SQL,命令如下:
highgo=# select pid,usename,query_start,query from pg_stat_activity;
pid | usename | query_start | query
-------+---------+-------------------------------+-------------------------------------------------------------
12722 | highgo | 2017-07-19 14:26:41.427112+08 | select pid,usename,query_start,query from pg_stat_activity;
(1 row)
然后再使用pg_cancel_backend()取消这个SQL,如果pg_cancel_backend取消不了,再使用pg_terminate_backend()。

本文介绍了瀚高数据库(HGDB 3.1.4)中的一些常用管理命令,包括查看数据库版本等操作。
8063

被折叠的 条评论
为什么被折叠?



