A5:SQL Mk-2

開発のこと、日々のこと

PostgreSQL で一部テーブルが一覧に含まれない

ホーム フォーラム A5:SQL Mk-2掲示板 PostgreSQL で一部テーブルが一覧に含まれない

  • このトピックには4件の返信、1人の参加者があり、最後にntzにより5ヶ月前に更新されました。
5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • 投稿者
    投稿
  • #21369 返信
    ntz
    ゲスト

    いつも便利に使わせていただいております。
    タイトルの件で、質問させていただきます。

    現在 v2.19.1 及び v2.20.0 beta8 をそれぞれポータブル版で使用していますが、PostgreSQL で一部のテーブルが一覧に含まれていないようです。

    具体的には下記操作で public スキーマ内のテーブルを一覧すると 725件ありますが、ツリービューでは「public > テーブル (720)」と表示されており、実際にいくつかのテーブルが見当たりません。


    SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = ‘public’;

    しかし見えないテーブルに対して何らかの SQL を実行すると、正しく操作可能です。

    これは既知の現象でしょうか?
    追加情報等が必要であれば、お知らせください。

    よろしくお願い致します。

    #21380 返信
    松原正和
    キーマスター

    ntz さんこんにちは。
     
    お返事が遅くなり申し訳ありません。

    PostgreSQL でテーブルを列挙するとき、pg_class の relkind 列の値で制限をかけたものを取得しています。

    A5:SQL Mk-2 内部では次のようにしてテーブル一覧を列挙しています。


    select
    ns.nspname as TABLE_SCHEMA
    , t.relname as TABLE_NAME
    , t.relkind as TABLE_TYPE
    from
    pg_catalog.pg_class t
    inner join pg_catalog.pg_namespace ns
    on ns.oid = t.relnamespace
    where
    ns.nspname = ‘public’
    and t.relkind in (‘r’, ‘v’, ‘m’, ‘f’, ‘p’)
    ORDER BY
    ns.nspname
    , t.relname

    これで、先の pg_tables の結果セットと比較してどのようなテーブルが列挙されないか確認していただけないでしょうか?

    よろしくお願いいたします。

    #21381 返信
    ntz
    ゲスト

    ご返信ありがとうございます。いただいた SQL での検証結果をお送りします。

    左から 3列が頂いた SQL の結果で、pg_tables 列が先にお送りした pg_tables の結果、a5 列が A5:SQL Mk-2 のテーブルツリービューの結果で、値を “-” としている箇所が結果に含まれない(=見えない)テーブルです。


    +————–+——————————–+————+———————–+—-+
    | table_schema | table_name | table_type | pg_tables | a5 |
    +————–+——————————–+————+———————–+—-+
    | public | ci_builds | r | ci_builds | – |
    | public | ci_builds_metadata | r | ci_builds_metadata | – |
    | public | ci_job_artifacts | r | ci_job_artifacts | – |
    | public | ci_pipeline_variables | r | ci_pipeline_variables | – |
    | public | ci_stages | r | ci_stages | – |
    | public | postgres_autovacuum_activity | v | – | – |
    | public | postgres_constraints | v | – | – |
    | public | postgres_foreign_keys | v | – | – |
    | public | postgres_index_bloat_estimates | v | – | – |
    | public | postgres_indexes | v | – | – |
    | public | postgres_partitioned_tables | v | – | – |
    | public | postgres_partitions | v | – | – |
    | public | postgres_sequences | v | – | – |
    +————–+——————————–+————+———————–+—-+

    ただ今回の事象が発生している DB には table_type が “r” のテーブルが 696個ありますが、アプリケーション上で見えないのは a5 列の 5テーブルのみです。

    そこで正常に表示される 720 テーブルと表示されない 5 テーブルの違いを pg_class で探してみたところ、pg_class.relispartition が true のテーブルが表示されていないようです。

    解決の手がかりになりますでしょうか?

    #21393 返信
    松原正和
    キーマスター

    ntz さんこんにちは。
     
    pg_class.relispartition が true というのは、パーティションテーブルの子テーブルですね。
    少し前のバージョンから、パーティション子テーブルは列挙せず、親テーブルを開いたときに必要に応じてプルダウンから子テーブルを選択することでその子テーブルのみ表示できるようにしています。
     
    ちょっとわかりにくかったですかね。ちょっとUIというか見せ方を考えた方がよいかもしれませんね。

    #21400 返信
    ntz
    ゲスト

    ご返信ありがとうございます。

    そう言うことだったんですね。パーティションテーブルに関して知識がなく、以前は表示されていたテーブルが見えなくなったことで混乱しておりました。失礼致しました。

    パーティションテーブルの親子関係には命名規則上のルールはなく、SQL を実行して調べるしかないようですので、親テーブルに紐づく子テーブルで目視できるような UI 上の機能があれば、さらに利便性が上がるかもしれないと感じました。

    ご対応いただき、ありがとうございました。

5件の投稿を表示中 - 1 - 5件目 (全5件中)
返信先: PostgreSQL で一部テーブルが一覧に含まれない
あなたの情報:




コメントは受け付けていません。