メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

ステップ 5: システムテーブルをクエリする

作成したテーブルに加え、データベースにはいくつかのシステムテーブルが含まれています。これらのシステムテーブルには、インストールに関する情報と、システムで実行されている各種のクエリや処理に関する情報が格納されます。これらのシステムテーブルに対してクエリを実行して、データベースに関する情報を収集することができます。

注記

System Tables Reference にある各テーブルの説明には、テーブルがすべてのユーザーまたはスーパーユーザーのみのどちらから表示可能かが示されています。スーパーユーザーのみが表示可能なテーブルに対してクエリを実行するには、スーパーユーザーとしてログインする必要があります。

Amazon Redshift では、以下のタイプのシステムテーブルに対するアクセス権を提供しています。

  • ログ記録のための STL テーブル

    これらのシステムテーブルは、システムの履歴を提供するために Amazon Redshift ログファイルから生成されます。ログテーブルには STL プレフィックスが付けられています。

  • スナップショットデータの STV テーブル

    これらのテーブルは、現在のシステムデータのスナップショットを格納した仮想システムテーブルです。スナップショットテーブルには STV プレフィックスが付けられています。

  • システムビュー

    システムビューには、複数の STL および STV システムテーブルから集めたデータのサブセットが含まれます。システムビューには SVV または SVL プレフィックスが付けられています。

  • システムカタログテーブル

    システムカタログテーブルには、テーブルや列に関する情報などのスキーマメタデータが格納されています。システムカタログテーブルには PG プレフィックスが付けられています。

クエリに関するシステムテーブル情報を取得するには、そのクエリに関連付けられたプロセス ID を指定しなければならない場合があります。詳細については、実行中のクエリのプロセス ID を調べる を参照してください。

テーブル名のリストを表示する

例えば、パブリックスキーマ内のすべてのテーブルのリストを表示するには、PG_TABLE_DEF システムカタログテーブルをクエリします。

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

結果は以下のようになります。

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

データベースユーザーを表示する

すべてのデータベースユーザーとそのユーザー ID(USESYSID)およびユーザー権限のリストを表示するには、PG_USER カタログをクエリします。

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)

最近のクエリを表示する

先の例では、マスターユーザーのユーザー ID (USESYSID) が 100 であることがわかりました。マスターユーザーが最も最近実行した 5 つのクエリをリストするには、SVL_QLOG ビューをクエリします。SVL_QLOG ビューには、STL_QUERY テーブルの情報のサブセットがわかりやすく表示されています。このビューを使用して、最近実行されたクエリのクエリ ID (QUERY) やプロセス ID (PID) を調べたり、クエリの完了にかかった時間を調べたりできます。クエリを特定しやすくするため、SVL_QLOG には、クエリ文字列 (SUBSTRING) の最初の 60 文字が含まれています。SELECT ステートメントで LIMIT 句を使用すると、結果を 5 行に制限することができます。

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)