Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

步骤 5:查询系统表

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

注意

“系统表参考”中每个表的说明指出了表是对所有用户可见还是只对超级用户可见。您必须以超级用户身份登录才能查询只对超级用户可见的表。

Amazon Redshift 提供了对以下类型的系统表的访问:

  • 用于记录的 STL 表

    这些系统表是从 Amazon Redshift 日志文件生成的,用于提供系统历史记录。日志记录表具有 STL 前缀。

  • 快照数据的 STV 表

    这些表是虚拟系统表,包含当前系统数据的快照。快照表具有 STV 前缀。

  • 系统视图

    系统视图包含一些 STL 和 STV 系统表中的数据的子集。系统视图具有 SVV 或 SVL 前缀。

  • 系统目录表

    系统目录表存储 schema 元数据,例如有关表和列的信息。系统目录表具有 PG 前缀。

您可能需要指定与查询关联的进程 ID 才能检索关于该查询的系统表信息。有关信息,请参阅 确定正在运行的查询的进程 ID

查看表名列表

例如,要查看 public schema 中所有表的列表,可以查询 PG_TABLE_DEF 系统目录表。

Copy
select distinct(tablename) from pg_table_def where schemaname = 'public';

结果类似下面这样:

Copy
tablename --------- category date event listing sales testtable users venue

查看数据库用户

您可以查询 PG_USER 目录来查看所有数据库用户的列表,还可以查看用户 ID (USESYSID) 和用户权限。

Copy
select * from pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- rdsdb | 1 | t | t | t | ******** | | masteruser | 100 | t | t | f | ******** | | dwuser | 101 | f | f | f | ******** | | simpleuser | 102 | f | f | f | ******** | | poweruser | 103 | f | t | f | ******** | | dbuser | 104 | t | f | f | ******** | | (6 rows)

Amazon Redshift 在内部使用用户名称 rdsdb 执行日常管理和维护任务。您可以向 select 语句添加 where usesysid > 1 来筛选查询,使其只显示用户定义的用户名称。

Copy
select * from pg_user where usesysid > 1; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- masteruser | 100 | t | t | f | ******** | | dwuser | 101 | f | f | f | ******** | | simpleuser | 102 | f | f | f | ******** | | poweruser | 103 | f | t | f | ******** | | dbuser | 104 | t | f | f | ******** | | (5 rows)

查看最近的查询

在上一示例中,您发现 masteruser 的用户 ID (USESYSID) 为 100。要列出 masteruser 最近执行的五次查询,您可以查询 SVL_QLOG 视图。SVL_QLOG 视图是来自 STL_QUERY 表的信息的更友好子集。您可以使用此视图查找最近运行的查询的查询 ID (QUERY) 或进程 ID (PID),也可以查看查询完成所花的时间。SVL_QLOG 包含查询字符串 (SUBSTRING) 的前 60 个字符来帮助您定位特定查询。带 LIMIT 子句使用 SELECT 语句可将结果限制为五行。

Copy
select query, pid, elapsed, substring from svl_qlog where userid = 100 order by starttime desc limit 5;

结果类似下面这样:

Copy
query | pid | elapsed | substring --------+-------+----------+-------------------------------------------------------------- 187752 | 18921 | 18465685 | select query, elapsed, substring from svl_qlog order by query 204168 | 5117 | 59603 | insert into testtable values (100); 187561 | 17046 | 1003052 | select * from pg_table_def where tablename = 'testtable'; 187549 | 17046 | 1108584 | select * from STV_WLM_SERVICE_CLASS_CONFIG 187468 | 17046 | 5670661 | select * from pg_table_def where schemaname = 'public'; (5 rows)