任务 6:查询系统表
除了您创建的表以外,您的数据库还包含很多系统表。这些系统表包含有关您的安装以及系统上运行的各种查询和进程的信息。您可以查询这些系统表来收集有关数据库的信息。
注意
本文档中每个表的说明指出了表是对所有用户可见还是只对超级用户可见。以超级用户身份登录以查询只对超级用户可见的表。
Amazon Redshift 提供了对以下类型的系统表的访问:
您可能需要指定与查询关联的进程 ID 才能检索关于该查询的系统表信息。有关更多信息,请参阅确定运行的查询的进程 ID。
查看表名称列表
要查看 schema 中所有表的列表,您可以查询 PG_TABLE_DEF 系统目录表。您可以首先检查 search_path
的设置。
SHOW search_path;
结果应如下所示:
search_path --------------- $user, public (1 row)
以下示例将 SALES
schema 添加到搜索路径并显示 SALES
schema 中的所有标。
set search_path to '$user', 'public', 'sales'; SHOW search_path; search_path ------------------------ "$user", public, sales (1 row) select * from pg_table_def where schemaname = 'sales'; schemaname | tablename | column | type | encoding | distkey | sortkey | notnull ------------+-----------+----------+------------------------+----------+---------+---------+--------- sales | demo | personid | integer | az64 | f | 0 | f sales | demo | city | character varying(255) | lzo | f | 0 | f (2 rows)
以下示例显示当前数据库上所有 schema 中的所有称为 DEMO
的表的列表。
select * from pg_table_def where tablename = 'demo'; schemaname | tablename | column | type | encoding | distkey | sortkey | notnull ------------+-----------+----------+------------------------+----------+---------+---------+--------- public | demo | personid | integer | az64 | f | 0 | f public | demo | city | character varying(255) | lzo | f | 0 | f sales | demo | personid | integer | az64 | f | 0 | f sales | demo | city | character varying(255) | lzo | f | 0 | f (4 rows)
有关更多信息,请参阅 PG_TABLE_DEF。
您还可以使用查询编辑器 v2 查看指定 schema 中的所有表,方法是首先选择要连接到的数据库。
查看用户
您可以查询 PG_USER 目录来查看所有用户的列表,还可以查看用户 ID (USESYSID) 和用户权限。
SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- rdsdb | 1 | true | true | true | ******** | infinity | awsuser | 100 | true | true | false | ******** | | guest | 104 | true | false | false | ******** | | (3 rows)
Amazon Redshift 在内部使用用户名称 rdsdb
执行日常管理和维护任务。您可以向 SELECT 语句添加 where usesysid > 1
来筛选查询,使其只显示用户定义的用户名称。
SELECT * FROM pg_user WHERE usesysid > 1; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig ------------+----------+-------------+----------+-----------+----------+----------+----------- awsuser | 100 | true | true | false | ******** | | guest | 104 | true | false | false | ******** | | (2 rows)
查看最近的查询
在上一示例中,adminuser
的用户 ID (USESYSID) 为 100。要列出 adminuser
最近运行的五次查询,您可以查询 SVL_QLOG 视图。
SVL_QLOG 视图是来自 STL_QUERY 表的信息的更友好子集。您可以使用此视图查找最近运行的查询的查询 ID (QUERY) 或进程 ID (PID)。您还可以使用此视图检查完成查询花了多长时间。SVL_QLOG 包含查询字符串 (SUBSTRING) 的前 60 个字符来帮助您定位特定查询。带 LIMIT 子句使用 SELECT 语句可将结果限制为五行。
SELECT query, pid, elapsed, substring from svl_qlog WHERE userid = 100 ORDER BY starttime desc LIMIT 4;
结果看起来如下所示。
query| pid | elapsed | substring ------+-------+----------+---------------------------------------------------------------- 892 | 21046 | 55868 | SELECT query, pid, elapsed, substring from svl_qlog WHERE us 620 | 17635 | 1296265 | SELECT query, pid, elapsed, substring from svl_qlog WHERE us 610 | 17607 | 82555 | SELECT * from DEMO; 596 | 16762 | 226372 | INSERT INTO DEMO VALUES (100);)