Skip to content

Instantly share code, notes, and snippets.

@kmoppel
Created March 26, 2025 22:50
Show Gist options
  • Save kmoppel/d27bf1d31affcc26f56fd3a9bd596477 to your computer and use it in GitHub Desktop.
Save kmoppel/d27bf1d31affcc26f56fd3a9bd596477 to your computer and use it in GitHub Desktop.
\set QUIET on
\pset linestyle unicode
\pset null ¤
;\set PROMPT1 '%n@%/=%#%x '
\pset pager on
\x auto
\set HISTCONTROL ignoreboth
\set HISTSIZE 10000
\set HISTFILE ~/.psql_history- :DBNAME
\set PSQL_EDITOR 'vim -c ":set ft=sql"'
\t
select 'search_path = ' || current_setting('search_path');
\t
;\timing on
\set QUIET off
\set c 'select count(*) from '
\set sa 'select pid, usename, now() - query_start as query_age, now() - xact_start as xact_age, wait_event_type, wait_event, query from pg_stat_activity where state != \'idle\' and pid != pg_backend_pid() and (datname = current_database() or datname is null) order by now() - query_start desc limit 20;'
\set sat 'select pid, usename, now() - query_start as query_age, now() - xact_start as xact_age, wait_event_type, wait_event, query::varchar(100) from pg_stat_activity where state != \'idle\' and pid != pg_backend_pid() and (datname = current_database() or datname is null) order by now() - query_start desc limit 5;'
\set sac 'select state, count(*), avg(now() - query_start) as avg_query from pg_stat_activity where datname = current_database() and state notnull and pid != pg_backend_pid() group by 1;'
\set sacl 'select state, wait_event_type, wait_event, count(*), avg(now() - query_start) as avg_query from pg_stat_activity where datname = current_database() and state notnull and pid != pg_backend_pid() group by 1, 2, 3 order by 4 desc;'
\set sstt 'select queryid, total_time * \'1ms\'::interval as total_time, (100.0 * total_time / sum(total_time) over())::numeric(3,1) as pct_total, mean_time::int, stddev_time::int, calls / 1000 as calls_k, (100 * shared_blks_hit::numeric / (nullif(shared_blks_hit, 0) + nullif(shared_blks_read, 0)))::numeric(4,1) sb_hit, ltrim(regexp_replace(query, E\'[ \\t\\n\\r]+\' , \' \', \'g\'))::varchar(200) as query from pg_stat_statements where calls > 10 order by total_time desc limit 5;'
\set sstt13 'select queryid, total_exec_time * \'1ms\'::interval as total_time, (100.0::numeric * total_exec_time / (select sum(total_exec_time) from pg_stat_statements))::numeric(4,1) as pct_total, mean_exec_time::numeric(10,3), stddev_exec_time::numeric(10,3), calls / 1000 as calls_k, (100 * shared_blks_hit::numeric / (nullif(shared_blks_hit, 0) + nullif(shared_blks_read, 0)))::numeric(4,1) sb_hit, ltrim(regexp_replace(query, E\'[ \\t\\n\\r]+\' , \' \', \'g\'))::varchar(200) as query from pg_stat_statements where calls > 10 order by total_time desc limit 5;'
\set ssc 'select queryid, (total_time / 1000)::int as total_time_s, (100.0 * calls / sum(calls) over())::numeric(3,1) as pct_total, mean_time::int, calls / 1000 as calls_k, ltrim(regexp_replace(query, E\'[ \\t\\n\\r]+\' , \' \', \'g\'))::varchar(200) as query from pg_stat_statements where not query ~* $$^(BEGIN|COMMIT|SET)$$ order by calls desc limit 5;'
\set ssc13 'select queryid, total_exec_time * \'1s\'::interval as total_time, (100.0::numeric * calls / (select sum(calls) from pg_stat_statements))::numeric(3,1) as pct_total,mean_exec_time::int as mean_exec_time_ms, calls / 1000 as calls_k, ltrim(regexp_replace(query, E\'[ \\t\\n\\r]+\' , \' \', \'g\'))::varchar(200) as query from pg_stat_statements where not query ~* $$^(BEGIN|COMMIT|SET)$$ order by calls desc limit 10;'
\set nds 'SELECT (regexp_split_to_array(category, \' \'))[1] as category_shortened, name, case when length(current_setting(name)) < 50 then current_setting(name) else current_setting(name)::varchar(47) || \'...\' end as current_setting, /*case when length(reset_val) < 50 then reset_val else reset_val::varchar(47) || \'...\' end as reset_val,*/ boot_val as pg_default, unit, source FROM pg_settings WHERE NOT category ~* \'formatting\' AND NOT category ~* \'logging\' AND NOT category ~* \'ssl\' AND NOT name ~ \'file\' AND NOT name ~ \'directory\' AND NOT name IN (\'cluster_name\', \'max_stack_depth\') AND boot_val IS DISTINCT FROM reset_val ORDER BY category, name;'
\set conf 'select name as setting, current_setting(name) as value from pg_settings where name = ANY(\'{shared_buffers,work_mem,max_connections,random_page_cost,max_wal_size,checkpoint_timeout,checkpoint_completion_target,default_statistics_target,effective_cache_size,autovacuum,jit,shared_preload_libraries,max_parallel_workers_per_gather,autovacuum_vacuum_scale_factor,autovacuum_vacuum_cost_delay,autovacuum_analyze_scale_factor,effective_io_concurrency,autovacuum_max_workers,synchronous_commit,synchronous_standby_names,listen_addresses,log_destination,fsync,full_page_writes,huge_pages,hot_standby_feedback,log_min_duration_statement,log_min_duration_sample,log_statement,log_statement_sample_rate,max_locks_per_transaction,max_worker_processes,password_encryption,recovery_min_apply_delay,server_version,temp_buffers,temp_file_limit,track_functions,track_io_timing,wal_buffers,wal_compression,wal_recycle,wal_segment_size,archive_mode,archive_command}\') /*and boot_val is distinct from reset_val*/ order by 1;'
\set up 'select now() - pg_postmaster_start_time() as uptime;'
:sat;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment