すべてのプロダクト
Search
ドキュメントセンター

Hologres:システムテーブル

最終更新日:Jan 11, 2025

このトピックでは、Hologres のシステムテーブルと、これらのテーブルの使用方法について説明します。

概要

次の表に、Hologres のシステムテーブルを示します。

テーブル名

説明

hologres.hg_table_properties

現在のデータベース内のすべてのテーブルと、これらのテーブルのプロパティに関する情報が含まれています。

pg_catalog.pg_tables

テーブルやビューなどのオブジェクト間の関係に関する情報が含まれています。

pg_catalog.pg_locks

テーブルのロック情報が含まれています。

pg_catalog.pg_class

テーブル間の関係などの情報が含まれています。このテーブルはPostgreSQLメタデータテーブルであり、通常は他のPostgreSQLシステムテーブルと一緒に使用されます。

hologres_statistic.hg_table_statistic

Hologres の統計情報が含まれています。データは複数のノード間で共有されます。

pg_catalog.pg_stats

PostgreSQLの統計情報が含まれています。データは単一ノードのプランナーによって使用されます。

pg_catalog.pg_roles

Hologresインスタンスのロールとその権限が含まれています。

information_schema.role_table_grants

テーブルやビューなどのオブジェクトに対するロールに付与されている権限が含まれています。

制限事項

  • hg で始まる名前のテーブルは、Hologres システムテーブルです。pg で始まる名前のテーブルは、PostgreSQLシステムテーブルです。作成した Hologres 内部テーブルと PostgreSQL システムテーブルを結合してデータをクエリすることはできません。PostgreSQL システムテーブルから Hologres 内部テーブルにデータをインポートすることはできません。

    説明

    Hologres V1.3.22 以降では、作成した Hologres 内部テーブルと PostgreSQL システムテーブルを結合してデータをクエリすること、および PostgreSQL システムテーブルから Hologres 内部テーブルにデータをインポートすることができます。ただし、PostgreSQL システムテーブルに Hologres でサポートされていないデータ型が含まれている場合、前述の操作を実行することはできません。これらの操作を実行する場合は、Hologres インスタンスを V1.3.22 以降にアップグレードしてください。

  • Hologres では、システムテーブルのオブジェクト識別子 (OID) フィールドは、テーブル、インデックス、ビューなどのオブジェクト間の関係の一意の識別子を指定します。PostgreSQL はスタンドアロンシステムですが、Hologres は分散システムです。Hologres インスタンスには複数の FE ノードがあります。ほとんどの場合、すべての FE ノードの OID 値は異なります。クエリ結果に OID 値が含まれている場合、OID 値に矛盾が生じる可能性があります。

hologres.hg_table_properties

hologres.hg_table_properties システムテーブルには、現在のデータベース内のすべてのテーブルと、これらのテーブルのプロパティに関する情報が含まれています。次の表に、hologres.hg_table_properties システムテーブルの列を示します。

説明

table_namespace

テーブルが属するスキーマの名前。Hologres は、次のシステムスキーマを提供します。

  • hologres: Hologres システムテーブルが含まれています。

  • hologres_statistic: 統計情報を格納するために使用されるテーブルが含まれています。

  • pg_catalog: PostgreSQL メタデータテーブルが含まれています。

table_name

テーブルの名前。Hologres は、次のシステムテーブルを提供します。

  • hologres.hg_insert_progress_stats: INSERT ステートメントの実行進捗情報が含まれています。

  • hologres.hg_table_properties: テーブルのインデックスとプロパティが含まれています。

  • hologres.hg_table_group_properties: テーブルグループのメタデータが含まれています。

  • hologres_statistic.hg_table_statistic: テーブルの統計情報が含まれています。

  • pg_catalog.pg_stat_activity: クエリに関する実行中のデータが含まれています。

property_key

テーブルのプロパティ。テーブルには、次のプロパティがあります。

  • table_id: テーブルの ID。各テーブルには、識別のために ID が割り当てられます。

  • clustering_index_id: クラスタリングキーの ID。

  • clustering_index_name: クラスタリングキーの名前。

  • lifecycle_in_days: テーブルの有効期間 (TTL)。値が -1 の場合、テーブルは永続的に有効です。Hologres では、値を変更することはできません。

  • storage_format: テーブルデータのストレージ形式。行指向テーブルの場合、値は sst です。Hologres V0.10 以降の列指向テーブルの場合、デフォルト値は orc です。

  • table_group: テーブルが属するテーブルグループの名前。

  • schema_version: テーブルのバージョン。

  • primary_key: テーブルのプライマリキー。

  • orientation: テーブルのストレージモード。有効な値:

    • row: 行指向ストレージ。

    • column: 列指向ストレージ。

    • row,column: ハイブリッド行-列ストレージ。Hologres V1.1 以降でこのストレージモードがサポートされています。

  • distribution_key: テーブルに指定された分散キー。

  • dictionary_encoding_columns: テーブルに指定された辞書マッピング。

  • bitmap_columns: テーブルに指定されたビットマップインデックス。

  • clustering_key: テーブルに指定されたクラスタリングキー。

  • create_time: テーブルが作成された時刻。

  • last_ddl_time: DDL ステートメントが最後に実行された時刻。

  • storage_mode: テーブルの階層化ストレージプロパティ。有効な値:

    • hot: 標準ストレージ。

    • cold: 低頻度アクセス (IA) ストレージ。

property_value

テーブルプロパティの値。

pg_catalog.pg_tables

pg_catalog.pg_tables システムテーブルには、テーブルのメタデータが含まれています。次の表に、pg_catalog.pg_tables システムテーブルの列を示します。

説明

schemaname

テーブルが属するスキーマの名前。作成したスキーマに加えて、Hologres は次のシステムスキーマを提供します。

  • hologres: Hologres システムテーブルが含まれています。

  • pg_catalog: PostgreSQL メタデータテーブルが含まれています。

  • information_schema: 現在のデータベースのビューが含まれています。

tablename

テーブル名。

tableowner

テーブルの所有者。有効な値:

developer: simple permission model (SPM) または schema-level permission model (SLPM) が有効になっているアカウント。

tablespace

この列は Hologres には適用されません。

hasindexes

テーブルにインデックスがあるか、またはあった場合は true です。

hasrules

テーブルにルールがあるか、またはあった場合は true です。

hastriggers

テーブルにトリガーがあるか、またはあった場合は true です。

rowsecurity

テーブルでセキュリティルールが有効になっている場合は true です。この列は Hologres には適用されません。

pg_catalog.pg_locks

pg_catalog.pg_locks システムテーブルには、ランタイムロック情報が含まれており、通常は、DDL ステートメントまたはクエリを実行できない場合にロックが存在するかどうかを識別するために使用されます。次の表に、pg_catalog.pg_locks システムテーブルの列を示します。

説明

locktype

ロックのタイプ。有効な値:

  • relation: テーブルロック。

  • extend、page、tuple、transactionid、virtualxid、object、および userlock: PostgreSQL ロック。これらの値は Hologres には適用されません。

  • advisory: DDL ロック。

database

オブジェクトが存在するデータベースの OID。

relation

テーブルの OID。オブジェクトがテーブルまたはテーブルの一部でない場合、列の値は null です。

page

この列は Hologres には適用されません。

tuple

この列は Hologres には適用されません。

virtualxid

トランザクションの仮想 ID。オブジェクトが仮想トランザクション ID でない場合、この列の値は null です。

transactionid

トランザクションの ID。オブジェクトがトランザクション ID でない場合、この列の値は null です。

classid

オブジェクトを含むシステムテーブルの OID。オブジェクトが通常のデータベースオブジェクトでない場合、この列の値は null です。この列は Hologres には適用されません。

objid

この列は Hologres には適用されません。

objsubid

この列は Hologres には適用されません。

virtualtransaction

ロックを保持しているか、待機しているトランザクションの ID。この列は Hologres には適用されません。

pid

ロックを保持しているか、待機しているサーバープロセスの ID。pg_catalog.pg_stat_activity テーブルでプロセス情報をクエリできます。

mode

プロセスのロックモード。ロックモードには、共有ロックと排他ロックが含まれます。

granted

  • ロックが保持されている場合は true です。

  • ロックが待機されている場合は false です。

fastpath

  • 高速パスを使用してロックを取得した場合は true です。

  • メインロックテーブルからロックを取得した場合は false です。

この列は Hologres には適用されません。

pg_catalog.pg_class

pg_catalog.pg_class システムテーブルには、すべての PostgreSQL システム情報が含まれています。次の表に、pg_catalog.pg_class システムテーブルの列を示します。

説明

oid

テーブル、インデックス、ビューなどのオブジェクト間の関係の一意の識別子。

説明

PostgreSQL はスタンドアロンシステムですが、Hologres は分散システムです。Hologres インスタンスには複数の FE ノードがあります。ほとんどの場合、すべての FE ノードの OID 値は異なります。クエリ結果に OID 値が含まれている場合、OID 値に矛盾が生じる可能性があります。

relname

テーブル、インデックス、ビューなどのオブジェクト間の関係の名前。

relnamespace

関係を含むスキーマの OID。

reltype

この列は Hologres には適用されません。

reloftype

この列は Hologres には適用されません。

relowner

関係の所有者。

relam

この列は Hologres には適用されません。

relfilenode

この列は Hologres には適用されません。

reltablespace

この列は Hologres には適用されません。

relpages

この列は Hologres には適用されません。

reltuples

テーブルの行数。これはプランナーが使用する推定値です。VACUUM ステートメント、ANALYZE ステートメント、または DDL ステートメントを使用して値を変更できます。この列は、Hologres の統計情報の行数を指定するために使用されます。

relallvisible

テーブルの可視性マップで all-visible とマークされているページの数。これはプランナーが使用する推定値です。VACUUM ステートメント、ANALYZE ステートメント、または DDL ステートメントを使用して値を変更できます。この列は、Hologres の統計情報のバージョンを指定するために使用されます。

reltoastrelid

この列は Hologres には適用されません。

relhasindex

テーブルにインデックスがあるか、またはあった場合は true です。

relisshared

テーブルがクラスター内のすべてのデータベースで共有されている場合は true です。pg_catalog.pg_database システムテーブルなどの特定のシステムテーブルのみが共有されます。この列は Hologres には適用されません。

relpersistence

有効な値:

  • p: 永続テーブル。

  • u: ログに記録されないテーブル。

  • t: 一時テーブル。

relkind

有効な値:

  • r: 通常のテーブル。

  • i: インデックス。

  • S: シーケンス。

  • v: ビュー。

  • m: マテリアライズドビュー。

  • c: 複合型。

  • t: TOAST テーブル。

  • f: 外部テーブル。

relnatts

テーブルの列数。システム列は除外されます。

relchecks

テーブルのチェック制約の数です。 この列は、Hologres では適用されません。

relhasoids

関係の各行に対して OID が生成される場合は true です。この列は Hologres には適用されません。

relhaspkey

テーブルにプライマリキーがあるか、またはあった場合は true です。

relhasrules

テーブルにルールがある場合、またはルールがあった場合、値は true です。 この列は、Hologres には適用されません。

relhastriggers

テーブルにトリガーがある場合、または過去にトリガーがあった場合、値は true です。 この列は、Hologres には適用されません。

relhassubclass

テーブルに継承された子テーブルがあるか、またはあった場合は true です。

relispopulated

この列は Hologres には適用されません。

relreplident

この列は Hologres には適用されません。

relfrozenxid

この列は Hologres には適用されません。

relminmxid

この列は Hologres には適用されません。

relacl

アクセス権限。

reloptions

テーブルのプロパティ。たとえば、autovacuum_enabled=false 文字列は、テーブルの自動バキュームおよび自動分析機能が無効になっていることを示します。

hologres_statistic.hg_table_statistic

hologres_statistic.hg_table_statistic システムテーブルには、Hologres の統計情報が含まれています。次の表に、hologres_statistic.hg_table_statistic システムテーブルの列を示します。

説明

unique_name

テーブルの一意の識別子。

schema_version

テーブルのバージョン。

statistic_version

統計情報のバージョン。

statistics

統計情報のコンテンツ。Base64 でエンコードされています。

schema_name

テーブルが属するスキーマの名前。

table_name

テーブルの名前。

total_rows

テーブルの合計行数。

sample_rows

統計のためにサンプリングされた行数。

nattr

テーブルの列数。

used_attrs

ANALYZE ステートメントに使用される列。

histogram_attrs

ヒストグラムの統計情報を含む列。

ndv_attrs

個別値の統計情報を含む列。

user_name

ANALYZE ステートメントを実行したユーザー、または自動分析機能を使用したユーザー。

analyze_timestamp

ANALYZE ステートメントが実行された時刻、または自動分析機能が使用された時刻。

analyze_cost

ANALYZE ステートメントまたは自動分析機能によって消費された時間。

analyze_count

ANALYZE ステートメントが実行された回数、または自動分析機能が使用された回数。

pg_catalog.pg_stats

pg_catalog.pg_stats システムテーブルには、PostgreSQL の統計情報が含まれています。次の表に、pg_catalog.pg_stats システムテーブルの列を示します。

説明

schemaname

スキーマの名前。

tablename

テーブルの名前。

attname

列の名前。

inherited

この列の値が true の場合、この列には継承されたサブカラムが含まれています。

null_frac

null 値を持つ列の割合。

avg_width

列のエントリの平均幅 (バイト単位)。

n_distinct

  • 値が 0 より大きい場合、列の個別値の推定数。

  • 値が 0 未満の場合、個別値の数を行数で割った値。負の形式は、ANALYZE ステートメントで個別値の数がテーブルデータの増加に伴って増加する可能性が高いことが示されている場合に使用されます。正の形式は、列に固定数の個別値があると思われる場合に使用されます。

たとえば、-1 は、個別値の数が行数と同じである一意の列を示します。

most_common_vals

列の最も一般的な値のリスト。この列に共通の値がない場合、この列の値は null です。

most_common_freqs

最も一般的な値の頻度のリスト。値は、各共通値の出現回数を行の総数で割ることによって計算されます。most_common_vals 列の値が null の場合、この列の値は null です。

histogram_bounds

列の値をほぼ等しい値のグループに分割する値のリスト。most_common_vals 列が存在する場合、most_common_vals 列の値はこのヒストグラム計算から除外されます。

correlation

この列は Hologres には適用されません。

most_common_elems

列の値内に最も頻繁に出現する null 以外の要素値のリスト。

most_common_elem_freqs

最も一般的な要素値の頻度のリスト。指定された値のインスタンスが少なくとも 1 つ含まれている行の割合です。most_common_elems 列の値が null の場合、この列の値は null です。

elem_count_histogram

この列は Hologres には適用されません。

pg_catalog.pg_roles

pg_catalog.pg_roles システムテーブルには、Hologres インスタンスのロールとその権限が含まれています。次の表に、pg_catalog.pg_roles システムテーブルの列を示します。

説明

rolname

ロールの名前。

rolsuper

ロールにスーパーユーザーの権限があるかどうかを示します。有効な値:

  • f: ロールにスーパーユーザーの権限がありません。

  • t: ロールにスーパーユーザーの権限があります。

rolinherit

ロールが別のロールのメンバーである場合に、ロールが別のロールの権限を継承できるかどうかを示します。有効な値:

  • f: ロールは別のロールの権限を継承できません。

  • t: ロールは別のロールの権限を継承できます。

rolcreaterole

ロールがさらにロールを作成できるかどうかを示します。有効な値:

  • f: ロールはさらにロールを作成できません。

  • t: ロールはさらにロールを作成できます。

rolcreatedb

ロールがデータベースを作成できるかどうかを示します。有効な値:

  • f: ロールはデータベースを作成できません。

  • t: ロールはデータベースを作成できます。

rolcanlogin

ロールがインスタンスに接続できるかどうかを示します。有効な値:

  • f: ロールはインスタンスに接続できません。

  • t: ロールはインスタンスに接続できます。

rolreplication

この列は Hologres には適用されません。

rolconnlimit

ロールが確立できる同時接続の最大数。値が -1 の場合、同時接続の最大数は Hologres で構成されていません。

rolpassword

この列は Hologres には適用されません。

rolvaliduntil

この列は Hologres には適用されません。

rolbypassrls

この列は Hologres には適用されません。

rolconfig

この列は Hologres には適用されません。

oid

ロールの一意の ID。

information_schema.role_table_grants

information_schema.role_table_grants テーブルには、Hologres インスタンスのテーブルやビューなどのオブジェクトに対するロールに付与されている権限が含まれています。次の表に、information_schema.role_table_grants テーブルの列を示します。

説明

grantor

承認者のロール。

grantee

被承認者のロール。

table_catalog

データベースの名前。

table_schema

スキーマの名前。

table_name

テーブルの名前。

privilege_type

付与された権限のタイプ。有効な値:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • TRUNCATE

  • REFERENCES

  • TRIGGER

is_grantable

権限を付与できる場合は YES です。それ以外の場合は NO です。

with_hierarchy

権限のタイプが YESSELECT の場合は NO です。それ以外の場合は です。

一般的な SQL ステートメント

いくつかの一般的なステートメントは、PostgreSQL クライアントアプリケーションである psql で実行できます。詳細については、「psql」をご参照ください。ビジネス要件に基づいて、次の一般的な SQL ステートメントを使用できます。

Hologres でテーブルのインデックスとプロパティをクエリする

SELECT * FROM hologres.hg_table_properties where table_name = '<tablename>';

tablename パラメーターは、テーブルの名前を指定します。

テーブルとビューの作成に使用される DDL ステートメントをクエリする

select hg_dump_script('<tablename>'); -- テーブルの作成に使用される DDL ステートメントをクエリします。
select hg_dump_script('<viewname>');  -- ビューの作成に使用される DDL ステートメントをクエリします。
説明

上記のステートメントを実行できない場合は、次のステートメントを実行してデータベースに拡張機能をインストールする必要があります。

create extension hg_toolkit;

インスタンスのエンドポイントをクエリする

インスタンスのエンドポイントをクエリするには、Hologres コンソールを使用するか、次のステートメントを実行します。

show hg_frontend_endpoints;

現在のインスタンス内のすべてのデータベースをクエリする

SELECT
    d.datname AS "Name",  -- データベース名
    pg_catalog.pg_get_userbyid(d.datdba) AS "Owner", -- 所有者
    pg_catalog.pg_encoding_to_char(d.encoding) AS "Encoding", -- エンコーディング
    d.datcollate AS "Collate", -- 照合順序
    d.datctype AS "Ctype", -- 文字分類
    pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges" -- アクセス権限
FROM
    pg_catalog.pg_database d
WHERE
    d.datname != 'postgres'
    AND d.datname != 'template0'
    AND d.datname != 'template1'
ORDER BY
    1;

現在のデータベース内のすべてのユーザーマッピングをクエリする

SELECT
    um.srvname AS "Server", -- サーバー名
    um.usename AS "User name" -- ユーザー名
FROM
    pg_catalog.pg_user_mappings um
WHERE
    um.srvname != 'query_log_store_server'
ORDER BY
    1,
    2;

現在のデータベース内のすべてのスキーマをクエリする

SELECT
    n.nspname AS "Name", -- スキーマ名
    pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" -- 所有者
FROM
    pg_catalog.pg_namespace n
WHERE
    n.nspname !~ '^pg_' -- pg_ で始まるスキーマを除外
    AND n.nspname <> 'information_schema' -- information_schema を除外
    AND n.nspname != 'hologres' -- hologres を除外
    AND n.nspname != 'hologres_sample' -- hologres_sample を除外
    AND n.nspname != 'hologres_statistic' -- hologres_statistic を除外
    AND n.nspname !~ '^hg_' -- hg_ で始まるスキーマを除外
    AND n.nspname !~ '^holo_' -- holo_ で始まるスキーマを除外
ORDER BY
    1;

現在のデータベース内のすべての内部テーブル、外部テーブル、およびビューをクエリする

SELECT
    n.nspname AS "Schema", -- スキーマ名
    c.relname AS "Name", -- テーブル名
    CASE c.relkind -- テーブルの種類
    WHEN 'r' THEN
        'table' -- テーブル
    WHEN 'v' THEN
        'view' -- ビュー
    WHEN 'm' THEN
        'materialized view' -- マテリアライズドビュー
    WHEN 'i' THEN
        'index' -- インデックス
    WHEN 'S' THEN
        'sequence' -- シーケンス
    WHEN 's' THEN
        'special' -- 特殊
    WHEN 'f' THEN
        'foreign table' -- 外部テーブル
    WHEN 'p' THEN
        'partitioned table' -- パーティションテーブル
    WHEN 'I' THEN
        'partitioned index' -- パーティションインデックス
    END AS "Type",
    pg_catalog.pg_get_userbyid(c.relowner) AS "Owner" -- 所有者
FROM
    pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
    c.relkind IN ('r', 'p', 'v', 'm', 'S', 'f', '')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
    AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY
    1,
    2;

現在のスキーマ内のすべてのテーブル (システムテーブルを除く) とこれらのテーブルの所有者をクエリする

-- 現在のデータベース内のすべてのテーブルをクエリします。システムテーブルが含まれます。
SELECT * FROM pg_tables


-- 現在のスキーマ内のすべてのテーブル (システムテーブルを除く) とこれらのテーブルの所有者をクエリします。
SELECT  n.nspname as "Schema" -- スキーマ名
        ,c.relname as "Name" -- テーブル名
        ,CASE c.relkind  -- テーブルの種類
            WHEN 'r' THEN 'table'  -- テーブル
            WHEN 'v' THEN 'view'  -- ビュー
            WHEN 'm' THEN 'materialized view'  -- マテリアライズドビュー
            WHEN 'i' THEN 'index'  -- インデックス
            WHEN 'S' THEN 'sequence'  -- シーケンス
            WHEN 's' THEN 'special'  -- 特殊
            WHEN 'f' THEN 'foreign table'  -- 外部テーブル
            WHEN 'p' THEN 'partitioned table'  -- パーティションテーブル
            WHEN 'I' THEN 'partitioned index'  -- パーティションインデックス
        END as "Type"
        ,pg_catalog.pg_get_userbyid(c.relowner) as "Owner" -- 所有者
FROM    pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n
ON      n.oid = c.relnamespace
WHERE   c.relkind IN ('r','p','v','m','S','f','')
and     n.nspname <> 'pg_catalog'
and     n.nspname <> 'information_schema'
and     n.nspname !~ '^pg_toast'
and     pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2;
            

親テーブルに対応するすべての子テーブルをクエリする

-- パーティションキー値を指定して、親テーブルに対応する子テーブルをクエリします。
SELECT  c.oid::pg_catalog.regclass -- 子テーブルの OID
        ,c.relkind -- 子テーブルの種類
        ,pg_catalog.pg_get_expr(c.relpartbound, c.oid) -- パーティションキー値
FROM    pg_catalog.pg_class c
        ,pg_catalog.pg_inherits i
WHERE   c.oid = i.inhrelid
AND     i.inhparent::pg_catalog.regclass = 'parent_table_name'::pg_catalog.regclass -- 親テーブル名
ORDER BY pg_catalog.pg_get_expr(c.relpartbound, c.oid) = 'DEFAULT'
;



-- パーティションキー値を指定せずに、親テーブルに対応する子テーブルをクエリします。
SELECT
    nmsp_parent.nspname AS parent_schema, -- 親スキーマ名
    parent.relname      AS parent, -- 親テーブル名
    nmsp_child.nspname  AS child_schema, -- 子スキーマ名
    child.relname       AS child -- 子テーブル名
FROM pg_inherits
    JOIN pg_class parent            ON pg_inherits.inhparent = parent.oid
    JOIN pg_class child             ON pg_inherits.inhrelid   = child.oid
    JOIN pg_namespace nmsp_parent   ON nmsp_parent.oid  = parent.relnamespace
    JOIN pg_namespace nmsp_child    ON nmsp_child.oid   = child.relnamespace
WHERE parent.relname='parent_table_name'; -- 親テーブル名

すべての子テーブルの作成時刻と親テーブルをクエリする

select
        cn.nspname as child_schema_name, -- 子スキーマ名
        c.relname as child_table_name, -- 子テーブル名
        pn.nspname as parent_schema_name, -- 親スキーマ名
        p.relname as parent_table_name, -- 親テーブル名
        to_timestamp(cp.property_value::bigint) as create_time -- 作成時刻
from pg_inherits i
left join pg_class p on p.oid=i.inhparent
left join pg_namespace pn on pn.oid = p.relnamespace
left join pg_class c on c.oid=i.inhrelid
left join pg_namespace cn on cn.oid = c.relnamespace
left join hologres.hg_table_properties cp on cp.property_key='create_time' and cp.table_namespace=pn.nspname and cp.table_name = c.relname;

すべての外部テーブルと外部テーブルに対応する MaxCompute テーブルをクエリする

SELECT  n.nspname -- スキーマ名
        ,c.relname -- 外部テーブル名
        ,s.srvname -- 外部サーバー名
        ,pg_catalog.array_to_string(
            ARRAY(
                SELECT pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value) FROM pg_catalog.pg_options_to_table(ftoptions) -- 外部テーブルオプション
            )
            ,', '
        )
FROM    pg_catalog.pg_foreign_table f
        ,pg_catalog.pg_foreign_server s
        ,pg_catalog.pg_class c
        ,pg_catalog.pg_namespace n
WHERE   s.oid = f.ftserver
and     c.oid = f.ftrelid
and     c.relnamespace = n.oid
and     n.nspname not in ('hologres', 'hologres_statistic', 'pg_catalog', 'pg_toast')
;
            

現在のデータベース内のすべてのビューをクエリする

SELECT
    n.nspname AS "Schema", -- スキーマ名
    c.relname AS "Name", -- ビュー名
    CASE c.relkind -- オブジェクトの種類
    WHEN 'r' THEN
        'table' -- テーブル
    WHEN 'v' THEN
        'view' -- ビュー
    WHEN 'm' THEN
        'materialized view' -- マテリアライズドビュー
    WHEN 'i' THEN
        'index' -- インデックス
    WHEN 'S' THEN
        'sequence' -- シーケンス
    WHEN 's' THEN
        'special' -- 特殊
    WHEN 'f' THEN
        'foreign table' -- 外部テーブル
    WHEN 'p' THEN
        'partitioned table' -- パーティションテーブル
    WHEN 'I' THEN
        'partitioned index' -- パーティションインデックス
    END AS "Type",
    pg_catalog.pg_get_userbyid(c.relowner) AS "Owner" -- 所有者
FROM
    pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
    c.relkind IN ('v', '')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
    AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY
    1,
    2;

テーブルに依存するビューをクエリする

select * from information_schema.view_table_usage where table_name = '<table_name>'; -- table_name はテーブルの名前です

テーブルのコメントとテーブルのフィールドのコメントをクエリする

  • テーブルのフィールドのコメントをクエリします。

    SELECT a.attname as Column, -- 列名
      pg_catalog.format_type(a.atttypid, a.atttypmod) as "Type", -- データ型
      a.attnotnull as "Nullable", -- NULL 値を許可するかどうか
      pg_catalog.col_description(a.attrelid, a.attnum) as "Description" -- 説明
    FROM pg_catalog.pg_attribute a
    WHERE a.attnum > 0 AND NOT a.attisdropped AND a.attrelid = '<schema.tablename>'::regclass::oid -- スキーマ名.テーブル名
    ORDER BY a.attnum;

    この例では、schema.tablename{スキーマ名}.{テーブル名} を示します。

  • テーブルの所有者など、テーブルに関するコメントと関連情報をクエリします。

    SELECT n.nspname as "Schema", -- スキーマ名
      c.relname as "Name", -- テーブル名
      CASE c.relkind  -- テーブルの種類
            WHEN 'r' THEN 'table'  -- テーブル
            WHEN 'v' THEN 'view'  -- ビュー
            WHEN 'm' THEN 'materialized view'  -- マテリアライズドビュー
            WHEN 'i' THEN 'index'  -- インデックス
            WHEN 'S' THEN 'sequence'  -- シーケンス
            WHEN 's' THEN 'special'  -- 特殊
            WHEN 'f' THEN 'foreign table'  -- 外部テーブル
            WHEN 'p' THEN 'table'  -- パーティションテーブル
            WHEN 'I' THEN 'index'  -- パーティションインデックス
        END as "Type",
      pg_catalog.pg_get_userbyid(c.relowner) as "Owner", -- 所有者
      pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "Size", -- サイズ
      pg_catalog.obj_description(c.oid, 'pg_class') as "Description" -- 説明
    FROM pg_catalog.pg_class c
         LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
    WHERE c.relkind IN ('r','p','v','m','S','f','')
          AND n.nspname <> 'pg_catalog'
          AND n.nspname <> 'information_schema'
          AND n.nspname !~ '^pg_toast'
      AND pg_catalog.pg_table_is_visible(c.oid)
    ORDER BY 1,2;
    
    
    -- 次の結果が返されます。
                            List of relations -- リレーションのリスト
     Schema | Name | Type  |      Owner       |  Size   | Description -- 説明
    --------+------+-------+------------------+---------+-------------
     public | a    | table | 1365937xxxx | xxxx bytes | abcdef
    (1 row)
    
  • 指定されたテーブルのコメントをクエリします。

    select pg_catalog.obj_description('<tablename>'::regclass::oid, 'pg_class') as "Description"; -- tablename はテーブル名です
    
    -- 次の結果が返されます。
    Description -- 説明
    ------------
    abcdef
    

    この例では、tablename は、コメントをクエリするテーブルの名前を示します。

データベース内のすべてのユーザーとロールをクエリする

SELECT
    r.rolname, -- ロール名
    r.rolsuper, -- スーパーユーザーかどうか
    r.rolinherit, -- 権限を継承するかどうか
    r.rolcreaterole, -- ロールを作成できるかどうか
    r.rolcreatedb, -- データベースを作成できるかどうか
    r.rolcanlogin, -- ログインできるかどうか
    r.rolconnlimit, -- 同時接続の最大数
    r.rolvaliduntil, -- 有効期限
    ARRAY (
        SELECT
            b.rolname
        FROM
            pg_catalog.pg_auth_members m
            JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
        WHERE
            m.member = r.oid) AS memberof, -- 所属するグループ
    r.rolreplication, -- レプリケーションロールかどうか
    r.rolbypassrls -- 行レベルセキュリティをバイパスするかどうか
FROM
    pg_catalog.pg_roles r
WHERE
    r.rolname !~ '^pg_'
ORDER BY
    1;

データベース内のすべての拡張機能をクエリする

SELECT
    e.extname AS "Name", -- 拡張機能名
    e.extversion AS "Version", -- バージョン
    n.nspname AS "Schema", -- スキーマ
    c.description AS "Description" -- 説明
FROM
    pg_catalog.pg_extension e
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace
    LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid
        AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass
WHERE
    e.extname != 'hg_admin_cmd'
    AND e.extname != 'holo_dump_stat'
    AND e.extname != 'holo_funcs'
    AND e.extname != 'holo_link'
    AND e.extname != 'holo_system_admin'
    AND e.extname != 'holo_dump_stat'
    AND e.extname != 'query_log'
    AND e.extname != 'plpgsql'
ORDER BY
    1;

アカウントの権限をクエリする

SELECT * FROM pg_roles where rolname='<uid>' -- uid はユーザー ID です

インスタンスのすべてのユーザーとその権限をクエリする

SELECT  r.rolname -- ロール名
        ,r.rolsuper -- スーパーユーザーかどうか
        ,r.rolinherit -- 権限を継承するかどうか
        ,r.rolcreaterole -- ロールを作成できるかどうか
        ,r.rolcreatedb -- データベースを作成できるかどうか
        ,r.rolcanlogin -- ログインできるかどうか
        ,r.rolconnlimit -- 同時接続の最大数
        ,r.rolvaliduntil -- 有効期限
        ,ARRAY(
            SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid
        ) as memberof -- 所属するグループ
        ,r.rolreplication -- レプリケーションロールかどうか
        ,r.rolbypassrls -- 行レベルセキュリティをバイパスするかどうか
FROM    pg_catalog.pg_roles r
WHERE   r.rolname !~ '^pg_'
ORDER BY 1;

ユーザーが権限を持つすべてのテーブルをクエリする

SELECT current_database()::information_schema.sql_identifier AS table_catalog, -- データベース名
    nc.nspname::information_schema.sql_identifier AS table_schema, -- スキーマ名
    c.relname::information_schema.sql_identifier AS table_name, -- テーブル名
        CASE
            WHEN nc.oid = pg_my_temp_schema() THEN 'LOCAL TEMPORARY'::text -- ローカル一時テーブル
            WHEN c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"]) THEN 'BASE TABLE'::text -- 基本テーブル
            WHEN c.relkind = 'v'::"char" THEN 'VIEW'::text -- ビュー
            WHEN c.relkind = 'f'::"char" THEN 'FOREIGN'::text -- 外部テーブル
            ELSE NULL::text
        END::information_schema.character_data AS table_type, -- テーブルタイプ
        CASE
            WHEN (c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"])) OR (c.relkind = ANY 
(ARRAY['v'::"char", 'f'::"char"])) AND (pg_relation_is_updatable(c.oid::regclass, false) 
& 8) = 8 THEN 'YES'::text -- 挿入可能かどうか
            ELSE 'NO'::text
        END::information_schema.yes_or_no AS is_insertable_into,
        CASE
            WHEN t.typname IS NOT NULL THEN 'YES'::text -- 型指定されているかどうか
            ELSE 'NO'::text
        END::information_schema.yes_or_no AS is_typed,
    NULL::character varying::information_schema.character_data AS commit_action -- コミットアクション
   FROM pg_namespace nc
     JOIN pg_class c ON nc.oid = c.relnamespace
     LEFT JOIN (pg_type t
     JOIN pg_namespace nt ON t.typnamespace = nt.oid) ON c.reloftype = t.oid
  WHERE (c.relkind = ANY (ARRAY['r'::"char", 'v'::"char", 'f'::"char", 'p'::"char"])) AND 
NOT pg_is_other_temp_schema(nc.oid) AND (pg_has_role('<USERID>', c.relowner, 'USAGE'::text) -- USERID はユーザー ID です
 OR has_table_privilege('<USERID>', c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) -- USERID はユーザー ID です
 OR has_any_column_privilege('<USERID>', c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text)); -- USERID はユーザー ID です

テーブルに対する権限を持つすべてのユーザーをクエリする

select rolname from pg_roles where has_table_privilege(rolname, '<schemaname>.<tablename>', -- schemaname はスキーマ名、tablename はテーブル名です
 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER'); -- 権限