首页 > 数据库 > 数据库开发技术 > PostgreSQL实用技巧
ALTER database postgres SET log_min_duration_statement = '250ms';
ALTER DATABASE postgres SET log_statement = 'all';
ALTER DATABASE postgres SET log_lock_waits = 'on';
ALTER DATABASE mydatabase SET statement_timeout = '60s';
# create extension pg_stat_statements;
SELECT
total_exec_time,
mean_exec_time as avg_ms,
calls,
query
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
SELECT count(*),
state
FROM pg_stat_activity
GROUP BY state;
SELECT pg_relation_size('table_name');
-- 更好的显示格式
SELECT pg_size_pretty(pg_relation_size('table_name'));
SELECT 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
SELECT schemaname || '.' || relname AS table,
indexrelname AS index,
pg_size_pretty(pg_relation_size(i.indexrelid)) AS "index size",
idx_scan as "index scans"
FROM pg_stat_user_indexes ui
JOIN pg_index i ON ui.indexrelid = i.indexrelid
WHERE NOT indisunique
AND idx_scan < 50
AND pg_relation_size(relid) > 5 * 8192
ORDER BY
pg_relation_size(i.indexrelid) / nullif(idx_scan, 0) DESC NULLS FIRST,
pg_relation_size(i.indexrelid) DESC;
SELECT reltuples::numeric as count
FROM pg_class
WHERE relname='table_name';
CREATE INDEX CONCURRENTLY foobar ON foo (bar);
\timing
\x auto
\e
\pset null ⛔
\set HISTFILE ~/.psql_history-:DBNAME
psql -E
psql -qtA
psql -qtH
\! clear
\watch
\set ON_ERROR_ROLLBACK interactive
psql <connection-string> --csv -c 'select * from test;'
\i filename
\pset border 2
\pset linestyle unicode
SELECT id,
coalesce(ip, 'no IP')
FROM logs;
SELECT * FROM
generate_series(now() - '3 month'::interval, now(), '1 day');
SELECT date_trunc('day', now());
SELECT now() - '1 month'::interval;
select pg_sleep(2.5);
GRANT pg_read_all_data TO username;
WITH pids AS (
SELECT pid
FROM pg_stat_activity
WHERE usename='test'
)
SELECT pg_terminate_backend(pid)
FROM pids;
WITH pids AS (
SELECT pid
FROM pg_stat_activity
WHERE username='test'
)
SELECT pg_cancel_backend(pid)
FROM pids;
原文作者:SQL编程思想;如有侵权,请联系管理员删除。