psql から Amazon Redshift でクエリ実行後に pg_last_query_id() で直前のクエリIDを取得して、stl_query や svl_query_summary からクエリIDでフィルタして性能情報を取得したかったんだけど、psql だとクエリ実行後に \gset を実行するとカラム名が変数名になって結果をセットすることができた。
-- query id select pg_last_query_id(); \gset -- execution time select userid, trim(database) "database", trim(label) as label, query, xid, pid, datediff(milliseconds, starttime, endtime) as "exec_time(ms)", starttime, endtime, aborted, insert_pristine, concurrency_scaling_status, trim(querytxt) as query_text from stl_query where query = :pg_last_query_id; -- show execution plan select query, maxtime, avgtime, rows, bytes, lpad(' ',stm+seg+step) || label as label, is_diskbased, workmem, is_rrscan, is_delayed_scan, rows_pre_filter from svl_query_summary where query = :pg_last_query_id order by stm, seg, step;
参考
psqlプログラミング - Qiita\gsetコマンド
\gsetコマンドは、直前に実行したSQLの結果を変数にセットします。ただし返された行が1行だけだった場合にのみセットできます。列名分だけ変数にセットされます。
SELECT c FROM my_table LIMIT 1; \gset \echo :c noborus