Forked from rgreenjr/postgres_queries_and_commands.sql
Last active
November 30, 2022 19:26
-
-
Save iver/3ba42c722634b44f4b1f53227039ab62 to your computer and use it in GitHub Desktop.
Useful PostgreSQL Queries and Commands
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- show running queries (pre 9.2) | |
SELECT procpid, age(query_start, clock_timestamp()), usename, current_query | |
FROM pg_stat_activity | |
WHERE current_query != '<IDLE>' AND current_query NOT ILIKE '%pg_stat_activity%' | |
ORDER BY query_start desc; | |
-- show running queries (9.2) | |
SELECT pid, age(query_start, clock_timestamp()), usename, query | |
FROM pg_stat_activity | |
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' | |
ORDER BY query_start desc; | |
-- kill running query | |
SELECT pg_cancel_backend(procpid); | |
-- kill idle query | |
SELECT pg_terminate_backend(procpid); | |
-- vacuum command | |
VACUUM (VERBOSE, ANALYZE); | |
-- all database users | |
select * from pg_stat_activity where current_query not like '<%'; | |
-- all databases and their sizes | |
select * from pg_user; | |
-- all tables and their size, with/without indexes | |
select datname, pg_size_pretty(pg_database_size(datname)) | |
from pg_database | |
order by pg_database_size(datname) desc; | |
-- cache hit rates (should not be less than 0.99) | |
SELECT sum(heap_blks_read) as heap_read, sum(heap_blks_hit) as heap_hit, (sum(heap_blks_hit) - sum(heap_blks_read)) / sum(heap_blks_hit) as ratio | |
FROM pg_statio_user_tables; | |
-- table index usage rates (should not be less than 0.99) | |
SELECT relname, 100 * idx_scan / (seq_scan + idx_scan) percent_of_times_index_used, n_live_tup rows_in_table | |
FROM pg_stat_user_tables | |
ORDER BY n_live_tup DESC; | |
-- how many indexes are in cache | |
SELECT sum(idx_blks_read) as idx_read, sum(idx_blks_hit) as idx_hit, (sum(idx_blks_hit) - sum(idx_blks_read)) / sum(idx_blks_hit) as ratio | |
FROM pg_statio_user_indexes; | |
-- Dump database on remote host to file | |
$ pg_dump -U username -h hostname databasename > dump.sql | |
-- Import dump into existing database | |
$ psql -d newdb -f dump.sql | |
--- Table and index size | |
SELECT | |
table_name, | |
pg_size_pretty(table_size) AS table_size, | |
pg_size_pretty(indexes_size) AS indexes_size, | |
pg_size_pretty(total_size) AS total_size | |
FROM ( | |
SELECT | |
table_name, | |
pg_table_size(table_name) AS table_size, | |
pg_indexes_size(table_name) AS indexes_size, | |
pg_total_relation_size(table_name) AS total_size | |
FROM ( | |
SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name | |
FROM information_schema.tables | |
) AS all_tables | |
ORDER BY total_size DESC | |
) AS pretty_sizes limit 10; | |
-- Build update serial instruction by table | |
SELECT | |
coalesce('select pg_catalog.setval(pg_get_serial_sequence('''|| | |
pg_class.relname || ''', ''' || | |
pg_attribute.attname || '''), (SELECT MAX(' || pg_attribute.attname || ') FROM ' || | |
pg_class.relname || ') +1 ); ', pg_class.relname) | |
FROM pg_index, pg_class, pg_attribute | |
WHERE | |
pg_class.oid = pg_class.relname::regclass AND | |
indrelid = pg_class.oid AND | |
pg_attribute.attrelid = pg_class.oid AND | |
pg_attribute.attnum = any(pg_index.indkey) AND | |
pg_class.relkind = 'r' and pg_class.relhaspkey | |
AND indisprimary; | |
-- Space used | |
SELECT nspname || '.' || relname AS "relation", | |
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" | |
FROM pg_class C | |
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) | |
WHERE nspname NOT IN ('pg_catalog', 'information_schema') | |
AND C.relkind <> 'i' | |
AND nspname !~ '^pg_toast' | |
ORDER BY pg_total_relation_size(C.oid) DESC | |
LIMIT 10; | |
SELECT | |
relname as "Table", | |
pg_size_pretty(pg_total_relation_size(relid)) As "Size", | |
pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as "External Size" | |
FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC limit 10; | |
select R.TABLE_NAME | |
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE u | |
inner join INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS FK | |
on U.CONSTRAINT_CATALOG = FK.UNIQUE_CONSTRAINT_CATALOG | |
and U.CONSTRAINT_SCHEMA = FK.UNIQUE_CONSTRAINT_SCHEMA | |
and U.CONSTRAINT_NAME = FK.UNIQUE_CONSTRAINT_NAME | |
inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE R | |
ON R.CONSTRAINT_CATALOG = FK.CONSTRAINT_CATALOG | |
AND R.CONSTRAINT_SCHEMA = FK.CONSTRAINT_SCHEMA | |
AND R.CONSTRAINT_NAME = FK.CONSTRAINT_NAME | |
WHERE U.COLUMN_NAME = 'id' | |
-- AND U.TABLE_CATALOG = 'b' | |
AND U.TABLE_SCHEMA = 'public' | |
AND U.TABLE_NAME = 'leads_lead'; | |
-- Unused index | |
SELECT | |
relid::regclass AS table, | |
indexrelid::regclass AS index, | |
pg_size_pretty(pg_relation_size(indexrelid::regclass)) AS index_size, | |
idx_tup_read, | |
idx_tup_fetch, | |
idx_scan | |
FROM pg_stat_user_indexes | |
JOIN pg_index USING (indexrelid) | |
WHERE idx_scan = 0 | |
AND indisunique IS FALSE; | |
SELECT | |
idstat.relname AS TABLE_NAME, | |
indexrelname AS index_name, | |
idstat.idx_scan AS index_scans_count, | |
pg_size_pretty(pg_relation_size(indexrelid)) AS index_size, | |
tabstat.idx_scan AS table_reads_index_count, | |
tabstat.seq_scan AS table_reads_seq_count, | |
tabstat.seq_scan + tabstat.idx_scan AS table_reads_count, | |
n_tup_upd + n_tup_ins + n_tup_del AS table_writes_count, | |
pg_size_pretty(pg_relation_size(idstat.relid)) AS table_size | |
FROM | |
pg_stat_user_indexes AS idstat | |
JOIN | |
pg_indexes | |
ON | |
indexrelname = indexname | |
AND | |
idstat.schemaname = pg_indexes.schemaname | |
JOIN | |
pg_stat_user_tables AS tabstat | |
ON | |
idstat.relid = tabstat.relid | |
WHERE | |
indexdef !~* 'unique' | |
ORDER BY | |
idstat.idx_scan DESC, | |
pg_relation_size(indexrelid) DESC |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment