查看系统表

除了创建的表以外,数据库还包含很多系统表。这些系统表包含openGauss安装信息以及openGauss上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。

查看系统表和系统视图”中每个表的说明指出了表是对所有用户可见还是只对初始化用户可见。必须以初始化用户身份登录才能查询只对初始化用户可见的表。

openGauss提供了以下类型的系统表和视图:

  • 继承自PG的系统表和视图

    这类系统表和视图具有PG前缀。

  • openGaussl新增的系统表和视图

    这类系统表和视图具有GS前缀。

查看数据库中包含的表

例如,在PG_TABLES系统表中查看public schema中包含的所有表。

  1. SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public';

结果类似如下这样:

  1. tablename
  2. -------------------
  3. err_hr_staffs
  4. test
  5. err_hr_staffs_ft3
  6. web_returns_p1
  7. mig_seq_table
  8. films4
  9. (6 rows)

查看数据库用户

通过PG_USER可以查看数据库中所有用户的列表,还可以查看用户ID(USESYSID)和用户权限。

  1. SELECT * FROM pg_user;
  1. usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valbegin |
  2. valuntil | respool | parent | spacelimit | useconfig | nodegroup | tempspacelimit |
  3. spillspacelimit
  4. ---------+----------+-------------+----------+-----------+---------+----------+----------+
  5. ----------+--------------+--------+------------+-----------+-----------+----------------+-
  6. ----------------
  7. omm | 10 | t | t | t | t | ******** | |
  8. | default_pool | 0 | | | | |
  9. joe | 16806 | f | f | f | f | ******** | |
  10. | default_pool | 0 | | | | |
  11. (2 rows)

查看和停止正在运行的查询语句

通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下:

  1. 设置参数track_activities为on。

    1. SET track_activities = on;

    当此参数为on时,数据库系统才会收集当前活动查询的运行信息。

  2. 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例:

    1. SELECT datname, usename, state,pid FROM pg_stat_activity;
    1. datname | usename | state | pid
    2. ----------+---------+--------+-----------------
    3. postgres | Ruby | active | 140298793514752
    4. postgres | Ruby | active | 140298718004992
    5. postgres | Ruby | idle | 140298650908416
    6. postgres | Ruby | idle | 140298625742592
    7. postgres | omm | active | 140298575406848
    8. (5 rows)

    如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。

    如果仅需要查看非空闲的查询语句,则使用如下命令查看:

    1. SELECT datname, usename, state FROM pg_stat_activity WHERE state != 'idle';
  3. 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID结束会话。

    1. SELECT PG_TERMINATE_BACKEND(139834759993104);

    显示类似如下信息,表示结束会话成功。

    1. PG_TERMINATE_BACKEND
    2. ----------------------
    3. t
    4. (1 row)

    显示类似如下信息,表示用户执行了结束当前会话的操作。

    1. FATAL: terminating connection due to administrator command
    2. FATAL: terminating connection due to administrator command

    查看系统表 - 图1 说明:

    gsql客户端使用PG_TERMINATE_BACKEND函数结束当前会话后台线程时,客户端不会退出而是自动重连。即还会返回“The connection to the server was lost. Attempting reset: Succeeded.”

    1. FATAL: terminating connection due to administrator command
    2. FATAL: terminating connection due to administrator command
    3. The connection to the server was lost. Attempting reset: Succeeded.