インフラエンジニアbacchiのわかったことまとめ

bacchi.me

PostgreSQLの便利技をまとめてみた

PostgreSQLの基本操作、便利ワザ

コマンドラインでPostgreSQLの操作を行う際の基本的なオペレーションをまとめていきますー

過去記事とのかぶりは勘弁して下さい・・

実行中のSQL表示

現在どんなクエリが走っているときは下記のクエリを流しましょう。

SELECT
     pid
    , start
    , now() - start AS lap
    , current_query
FROM (
     SELECT backendid
          , pg_stat_get_backend_pid(S.backendid) AS pid
          , pg_stat_get_backend_activity_start(S.backendid) AS start
          , pg_stat_get_backend_activity(S.backendid) AS current_query
      FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS S
    ) AS S
WHERE
     current_query  ''
 AND current_query  ''
ORDER BY lap DESC;

SQL停止

「実行中のSQLの表示」のクエリを実行した時に出力されたのpid がプロセスIDです。
そのプロセスIDを指定してSQLを停止できます。

SELECT pg_cancel_backend(プロセスID);
SELECT pg_cancel_backend(69053);

テーブルのGRANT情報表示

テーブルの権限がどのように設定されているかがわかります。

z

テーブルの容量表示

テーブルでどのくらいの容量を食っているか確認する時用のクエリ。

SELECT
   relname,
   reltuples as rows,
   (relpages * 8192) as bytes,
   ( (relpages * 8192) / (1024 * 1024) ) AS mbytes
FROM
   pg_class
WHERE
   relname = 'center_link';

DBの容量表示

DB全体でどのくらい容量を食っているか確認する時用のクエリ

SELECT
   relname,
   reltuples as rows,
   relpages as pages,
   (relpages * 8192) as bytes,
   ( (relpages * 8192) / (1024 * 1024) ) AS mbytes
FROM
   pg_class
WHERE
     relname !~ \'^pg_\'
 AND relkind = \'r\'
ORDER BY rows DESC;

カラム名の検索

たとえば、"email"というカラムを含むテーブルを検索することができます。

SELECT
   a.attrelid
  ,a.attname
  ,a.atttypid
  ,c.relname
  ,c.reltoastrelid
FROM
   pg_class c
  ,pg_attribute a
WHERE
     a.attrelid=c.oid
 AND attname=\'email\'
ORDER BY relname;
  • B!