1"use strict";(self.webpackChunkdatabase_lab_docs=self.webpackChunkdatabase_lab_docs||[]).push([[2256],{15293(e){e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"baseSidebar":[{"type":"category","label":"Overview","items":[{"type":"link","href":"/docs/","label":"Documentation home","docId":"get-started","unlisted":false},{"type":"link","href":"/docs/questions-and-answers","label":"Questions & answers","docId":"questions-and-answers","unlisted":false},{"type":"link","href":"/docs/roadmap","label":"Vision & roadmap","docId":"roadmap","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"PostgresAI how-tos","items":[{"type":"link","href":"/docs/postgresai-howtos/postgresai-cli","label":"PostgresAI CLI","docId":"postgresai-howtos/postgresai-cli","unlisted":false},{"type":"link","href":"/docs/postgresai-howtos/joe-cli","label":"Joe from the CLI","docId":"postgresai-howtos/joe-cli","unlisted":false},{"type":"link","href":"/docs/postgresai-howtos/how-to-install-mcp","label":"Install MCP","docId":"postgresai-howtos/how-to-install-mcp","unlisted":false},{"type":"link","href":"/docs/postgresai-howtos/how-to-work-with-issues","label":"Work with Issues","docId":"postgresai-howtos/how-to-work-with-issues","unlisted":false},{"type":"link","href":"/docs/postgresai-howtos/install-postgres-ai-monitoring-from-postgresai-console","label":"Install monitoring","docId":"postgresai-howtos/install-postgres-ai-monitoring-from-postgresai-console","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Monitoring","items":[{"type":"link","href":"/docs/monitoring","label":"Overview","docId":"monitoring/index","unlisted":false},{"type":"category","label":"Getting started","items":[{"type":"link","href":"/docs/monitoring/getting-started/","label":"Quick start","docId":"monitoring/getting-started/index","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/requirements","label":"Requirements","docId":"monitoring/getting-started/requirements","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/installation-cli","label":"CLI (npx/bunx)","docId":"monitoring/getting-started/installation-cli","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/installation-docker","label":"Docker Compose","docId":"monitoring/getting-started/installation-docker","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/installation-helm","label":"Helm (Kubernetes)","docId":"monitoring/getting-started/installation-helm","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/installation-cloud","label":"Cloud (RDS, CloudSQL, Supabase)","docId":"monitoring/getting-started/installation-cloud","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/quickstart-supabase","label":"Quick start for Supabase","docId":"monitoring/getting-started/quickstart-supabase","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/quickstart-rds-privatelink","label":"Quick start for Amazon RDS (AWS PrivateLink)","docId":"monitoring/getting-started/quickstart-rds-privatelink","unlisted":false},{"type":"link","href":"/docs/monitoring/getting-started/upgrade","label":"Upgrading","docId":"monitoring/getting-started/upgrade","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dashboards","items":[{"type":"link","href":"/docs/monitoring/dashboards/","label":"Overview","docId":"monitoring/dashboards/index","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/node-overview","label":"01. Node overview (high level)","docId":"monitoring/dashboards/node-overview","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/query-analysis","label":"02. Query analysis (top-N)","docId":"monitoring/dashboards/query-analysis","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/single-query","label":"03. Single queryid","docId":"monitoring/dashboards/single-query","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/wait-events","label":"04. Wait event analysis (ASH)","docId":"monitoring/dashboards/wait-events","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/backups","label":"05. WAL, backups, DR","docId":"monitoring/dashboards/backups","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/replication","label":"06. Replication","docId":"monitoring/dashboards/replication","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/autovacuum","label":"07. Autovacuum & xmin horizon","docId":"monitoring/dashboards/autovacuum","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/table-stats","label":"08. Aggregated table","docId":"monitoring/dashboards/table-stats","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/single-table","label":"09. Single table","docId":"monitoring/dashboards/single-table","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/index-health","label":"10. Aggregated index","docId":"monitoring/dashboards/index-health","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/single-index","label":"11. Single index","docId":"monitoring/dashboards/single-index","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/slru","label":"12. SLRU cache","docId":"monitoring/dashboards/slru","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/lock-contention","label":"13. Lock contention","docId":"monitoring/dashboards/lock-contention","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/io-statistics","label":"14. I/O statistics","docId":"monitoring/dashboards/io-statistics","unlisted":false},{"type":"link","href":"/docs/monitoring/dashboards/self-monitoring","label":"Self-monitoring","docId":"monitoring/dashboards/self-monitoring","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Metrics reference","items":[{"type":"link","href":"/docs/monitoring/metrics/","label":"Overview","docId":"monitoring/metrics/index","unlisted":false},{"type":"link","href":"/docs/monitoring/metrics/pg-stat-statements","label":"pg_stat_statements","docId":"monitoring/metrics/pg-stat-statements","unlisted":false},{"type":"link","href":"/docs/monitoring/metrics/wait-events","label":"Wait events","docId":"monitoring/metrics/wait-events","unlisted":false},{"type":"link","href":"/docs/monitoring/metrics/table-metrics","label":"Table metrics","docId":"monitoring/metrics/table-metrics","unlisted":false},{"type":"link","href":"/docs/monitoring/metrics/index-metrics","label":"Index metrics","docId":"monitoring/metrics/index-metrics","unlisted":false},{"type":"link","href":"/docs/monitoring/metrics/system-metrics","label":"Database- and cluster-level","docId":"monitoring/metrics/system-metrics","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Configuration","items":[{"type":"link","href":"/docs/monitoring/configuration/","label":"Overview","docId":"monitoring/configuration/index","unlisted":false},{"type":"link","href":"/docs/monitoring/configuration/pgwatch-config","label":"pgwatch","docId":"monitoring/configuration/pgwatch-config","unlisted":false},{"type":"link","href":"/docs/monitoring/configuration/prometheus-config","label":"Prometheus/VictoriaMetrics","docId":"monitoring/configuration/prometheus-config","unlisted":false},{"type":"link","href":"/docs/monitoring/configuration/grafana-config","label":"Grafana","docId":"monitoring/configuration/grafana-config","unlisted":false},{"type":"link","href":"/docs/monitoring/configuration/alerting","label":"Alerting","docId":"monitoring/configuration/alerting","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Troubleshooting","items":[{"type":"link","href":"/docs/monitoring/troubleshooting/","label":"Overview","docId":"monitoring/troubleshooting/index","unlisted":false},{"type":"link","href":"/docs/monitoring/troubleshooting/no-data","label":"No data","docId":"monitoring/troubleshooting/no-data","unlisted":false},{"type":"link","href":"/docs/monitoring/troubleshooting/permissions","label":"Permission errors","docId":"monitoring/troubleshooting/permissions","unlisted":false},{"type":"link","href":"/docs/monitoring/troubleshooting/performance","label":"Performance","docId":"monitoring/troubleshooting/performance","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Advanced","items":[{"type":"link","href":"/docs/monitoring/advanced/","label":"Overview","docId":"monitoring/advanced/index","unlisted":false},{"type":"link","href":"/docs/monitoring/advanced/multi-cluster","label":"Multi-cluster","docId":"monitoring/advanced/multi-cluster","unlisted":false},{"type":"link","href":"/docs/monitoring/advanced/architecture","label":"Architecture","docId":"monitoring/advanced/architecture","unlisted":false},{"type":"link","href":"/docs/monitoring/advanced/security","label":"Security","docId":"monitoring/advanced/security","unlisted":false},{"type":"link","href":"/docs/monitoring/advanced/telemetry","label":"Telemetry","docId":"monitoring/advanced/telemetry","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"DBLab Engine","items":[{"type":"link","href":"/docs/database-lab","label":"Overview","docId":"database-lab/index","unlisted":false},{"type":"link","href":"/docs/database-lab/supported-databases","label":"PostgreSQL versions and extensions supp
1orted in DBLab Engine","docId":"database-lab/supported-databases","unlisted":false},{"type":"link","href":"/docs/database-lab/user-interface","label":"DBLab UI","docId":"database-lab/user-interface","unlisted":false},{"type":"link","href":"/docs/database-lab/prometheus-monitoring","label":"Prometheus monitoring","docId":"database-lab/prometheus-monitoring","unlisted":false},{"type":"link","href":"/docs/database-lab/masking","label":"Data masking and obfuscation","docId":"database-lab/masking","unlisted":false},{"type":"link","href":"/docs/database-lab/db-migration-checker","label":"Overview","docId":"database-lab/db-migration-checker","unlisted":false},{"type":"link","href":"/docs/database-lab/telemetry","label":"Telemetry","docId":"database-lab/telemetry","unlisted":false},{"type":"category","label":"Joe bot","items":[{"type":"link","href":"/docs/joe-bot","label":"Overview","docId":"joe-bot/index","unlisted":false},{"type":"link","href":"/docs/joe-bot/example","label":"Demo and example","docId":"joe-bot/example","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Platform (SaaS)","items":[{"type":"link","href":"/docs/platform","label":"Overview","docId":"platform/index","unlisted":false},{"type":"link","href":"/docs/platform/security","label":"Security","docId":"platform/security","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"DBLab tutorials","items":[{"type":"link","href":"/docs/tutorials/database-lab-tutorial","label":"Tutorial for any Postgres","docId":"tutorials/database-lab-tutorial","unlisted":false},{"type":"link","href":"/docs/tutorials/database-lab-tutorial-amazon-rds","label":"Tutorial for Amazon RDS","docId":"tutorials/database-lab-tutorial-amazon-rds","unlisted":false},{"type":"link","href":"/docs/tutorials/joe-setup","label":"Start using Joe Bot","docId":"tutorials/joe-setup","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"DBLab how-tos","items":[{"type":"link","href":"/docs/dblab-howtos","label":"Overview","docId":"dblab-howtos/index","unlisted":false},{"type":"category","label":"Administration","items":[{"type":"link","href":"/docs/dblab-howtos/administration","label":"Administration","docId":"dblab-howtos/administration/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/install-dle-from-postgres-ai","label":"Install DBLab from PostgresAI Console","docId":"dblab-howtos/administration/install-dle-from-postgres-ai","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/install-dle-from-aws-marketplace","label":"Install DBLab from AWS Marketplace","docId":"dblab-howtos/administration/install-dle-from-aws-marketplace","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/install-dle-manually","label":"Install DBLab manually","docId":"dblab-howtos/administration/install-dle-manually","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/run-database-lab-on-mac","label":"Run DBLab on macOS","docId":"dblab-howtos/administration/run-database-lab-on-mac","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/postgresql-configuration","label":"Configure PostgreSQL used by DBLab Engine","docId":"dblab-howtos/administration/postgresql-configuration","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/engine-manage","label":"Manage DBLab Engine","docId":"dblab-howtos/administration/engine-manage","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/joe-manage","label":"Manage Joe Bot","docId":"dblab-howtos/administration/joe-manage","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/engine-secure","label":"Secure DBLab Engine","docId":"dblab-howtos/administration/engine-secure","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/teleport-integration","label":"Teleport integration","docId":"dblab-howtos/administration/teleport-integration","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/logical-full-refresh","label":"Full refresh for \\"logical\\" mode","docId":"dblab-howtos/administration/logical-full-refresh","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/ci-observer-postgres-log-masking","label":"Masking sensitive data (CI Observer)","docId":"dblab-howtos/administration/ci-observer-postgres-log-masking","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/add-disk-space-to-zfs-pool","label":"Increase ZFS pool size without downtime","docId":"dblab-howtos/administration/add-disk-space-to-zfs-pool","unlisted":false},{"type":"category","label":"Data sources","items":[{"type":"link","href":"/docs/dblab-howtos/administration/data","label":"Overview","docId":"dblab-howtos/administration/data/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/rds","label":"AWS RDS","docId":"dblab-howtos/administration/data/rds","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/rds-refresh","label":"RDS/Aurora refresh","docId":"dblab-howtos/administration/data/rds-refresh","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/database-rename","label":"Rename databases","docId":"dblab-howtos/administration/data/database-rename","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/dump","label":"pg_dump","docId":"dblab-howtos/administration/data/dump","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/wal-g","label":"WAL-G","docId":"dblab-howtos/administration/data/wal-g","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/pgbackrest","label":"pgBackRest","docId":"dblab-howtos/administration/data/pgbackrest","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/pg_basebackup","label":"pg_basebackup","docId":"dblab-howtos/administration/data/pg_basebackup","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/administration/data/custom","label":"Custom","docId":"dblab-howtos/administration/data/custom","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"CLI","items":[{"type":"link","href":"/docs/dblab-howtos/cli","label":"Overview","docId":"dblab-howtos/cli/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/cli/cli-install-init","label":"Install and initialize DBLab CLI","docId":"dblab-howtos/cli/cli-install-init","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Cloning","items":[{"type":"link","href":"/docs/dblab-howtos/cloning","label":"Overview","docId":"dblab-howtos/cloning/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/cloning/create-clone","label":"Create a clone","docId":"dblab-howtos/cloning/create-clone","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/cloning/connect-clone","label":"Connect to a clone","docId":"dblab-howtos/cloning/connect-clone","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/cloning/reset-clone","label":"Reset clone\'s state","docId":"dblab-howtos/cloning/reset-clone","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/cloning/destroy-clone","label":"Destroy a clone","docId":"dblab-howtos/cloning/destroy-clone","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/cloning/clone-protection","label":"Protect clones from manual and automatic deletion","docId":"dblab-howtos/cloning/clone-protection","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/cloning/clone-upgrade","label":"Upgrade Postgres in a clone","docId":"dblab-howtos/cloning/clone-upgrade","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Branching","items":[{"type":"link","href":"/docs/dblab-howtos/branching","label":"Overview","docId":"dblab-howtos/branching/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/branching/create-branch","label":"Create a database branch","docId":"dblab-howtos/branching/create-branch","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/branching/delete-branch","label":"Delete a database branch","docId":"dblab-howtos/branching/delete-branch","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/branching/preview-environments-with-dblab-and-coolify","label":"Preview environments with Coolify","docId":"dblab-howtos/branching/preview-environments-with-dblab-and-coolify","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Snapshots","items":[{"type":"link","href":"/docs/dblab-howtos/snapsh
1ots","label":"Overview","docId":"dblab-howtos/snapshots/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/snapshots/create-snapshot","label":"Create a snapshot","docId":"dblab-howtos/snapshots/create-snapshot","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/snapshots/delete-snapshot","label":"Delete a snapshot","docId":"dblab-howtos/snapshots/delete-snapshot","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"SQL optimization chatbot (Joe bot)","items":[{"type":"link","href":"/docs/dblab-howtos/joe-bot","label":"Overview","docId":"dblab-howtos/joe-bot/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/get-query-plan","label":"Get a query execution plan","docId":"dblab-howtos/joe-bot/get-query-plan","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/create-index","label":"Create an index","docId":"dblab-howtos/joe-bot/create-index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/reset-session","label":"Reset a session","docId":"dblab-howtos/joe-bot/reset-session","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/query-activity-and-termination","label":"Get a list of active queries and stop long-running queries","docId":"dblab-howtos/joe-bot/query-activity-and-termination","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/visualize-query-plan","label":"Visualize a query plan","docId":"dblab-howtos/joe-bot/visualize-query-plan","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/sql-optimization-history","label":"Work with SQL optimization history","docId":"dblab-howtos/joe-bot/sql-optimization-history","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/count-rows","label":"Get row counts for arbitrary SELECTs","docId":"dblab-howtos/joe-bot/count-rows","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/joe-bot/get-database-table-index-size","label":"Get sizes of PostgreSQL database objects","docId":"dblab-howtos/joe-bot/get-database-table-index-size","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Platform","items":[{"type":"link","href":"/docs/dblab-howtos/platform","label":"Overview","docId":"dblab-howtos/platform/index","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/platform/start-using-platform","label":"Start using Platform","docId":"dblab-howtos/platform/start-using-platform","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/platform/tokens","label":"Create and use tokens","docId":"dblab-howtos/platform/tokens","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/platform/onboarding","label":"Platform onboarding checklist","docId":"dblab-howtos/platform/onboarding","unlisted":false},{"type":"link","href":"/docs/dblab-howtos/platform/audit-logs","label":"Audit logs and SIEM","docId":"dblab-howtos/platform/audit-logs","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Postgres how-tos","items":[{"type":"link","href":"/docs/postgres-howtos/","label":"Overview","docId":"postgres-howtos/index","unlisted":false},{"type":"category","label":"Performance & optimization","items":[{"type":"category","label":"Query tuning","items":[{"type":"link","href":"/docs/postgres-howtos/performance-optimization/query-tuning/explain-analyze-buffers","label":"EXPLAIN ANALYZE or EXPLAIN (ANALYZE, BUFFERS)?","docId":"postgres-howtos/performance-optimization/query-tuning/explain-analyze-buffers","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/query-tuning/from-pgss-to-explain--how-to-find-query-examples","label":"find query examples for problematic pg_stat_statements records","docId":"postgres-howtos/performance-optimization/query-tuning/from-pgss-to-explain--how-to-find-query-examples","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/query-tuning/how-to-decide-if-query-too-slow","label":"decide when a query is too slow and needs optimization","docId":"postgres-howtos/performance-optimization/query-tuning/how-to-decide-if-query-too-slow","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/query-tuning/how-to-imitate-production-planner","label":"make the non-production PG planner behave like in production","docId":"postgres-howtos/performance-optimization/query-tuning/how-to-imitate-production-planner","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/performance-optimization/query-tuning/"},{"type":"category","label":"Indexing","items":[{"type":"link","href":"/docs/postgres-howtos/performance-optimization/indexing/h
1ow-to-monitor-index-operations","label":"monitor CREATE INDEX / REINDEX progress in PG 12+","docId":"postgres-howtos/performance-optimization/indexing/how-to-monitor-index-operations","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/indexing/over-indexing","label":"Over-indexing","docId":"postgres-howtos/performance-optimization/indexing/over-indexing","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/indexing/index-maintenance","label":"Index maintenance","docId":"postgres-howtos/performance-optimization/indexing/index-maintenance","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/indexing/how-to-find-unused-indexes","label":"find unused indexes","docId":"postgres-howtos/performance-optimization/indexing/how-to-find-unused-indexes","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/indexing/how-to-find-redundent-indexes","label":"find redundant indexes","docId":"postgres-howtos/performance-optimization/indexing/how-to-find-redundent-indexes","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/indexing/rebuild-indexes-without-deadlocks","label":"rebuild many indexes using many backends avoiding deadlocks","docId":"postgres-howtos/performance-optimization/indexing/rebuild-indexes-without-deadlocks","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/performance-optimization/indexing/"},{"type":"category","label":"Monitoring","items":[{"type":"link","href":"/docs/postgres-howtos/performance-optimization/monitoring/pg-stat-statements-part-1","label":"work with pg_stat_statements, part 1","docId":"postgres-howtos/performance-optimization/monitoring/pg-stat-statements-part-1","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/monitoring/ad-hoc-monitoring","label":"Ad-hoc monitoring","docId":"postgres-howtos/performance-optimization/monitoring/ad-hoc-monitoring","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/monitoring/how-to-monitor-transaction-id-wraparound-risks","label":"monitor transaction ID wraparound risks","docId":"postgres-howtos/performance-optimization/monitoring/how-to-monitor-transaction-id-wraparound-risks","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/monitoring/how-to-monitor-xmin-horizon","label":"monitor xmin horizon to prevent XID/MultiXID wraparound and high bloat","docId":"postgres-howtos/performance-optimization/monitoring/how-to-monitor-xmin-horizon","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/monitoring/how-to-analyze-heavyweight-locks-part-1","label":"analyze heavyweight locks, part 1","docId":"postgres-howtos/performance-optimization/monitoring/how-to-analyze-heavyweight-locks-part-1","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/monitoring/how-to-reduce-wal-generation-rates","label":"reduce WAL generation rates","docId":"postgres-howtos/performance-optimization/monitoring/how-to-reduce-wal-generation-rates","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/performance-optimization/monitoring/"},{"type":"category","label":"Benchmarks","items":[{"type":"link","href":"/docs/postgres-howtos/performance-optimization/benchmarks/how-to-benchmark","label":"benchmark","docId":"postgres-howtos/performance-optimization/benchmarks/how-to-benchmark","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/performance-optimization/benchmarks/pre-and-post-steps-for-benchmark-iterations","label":"Pre- and post-steps for benchmark iterations","docId":"postgres-howtos/performance-optimization/benchmarks/pre-and-post-steps-for-benchmark-iterations","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/performance-optimization/benchmarks/"}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/performance-optimization/"},{"type":"category","label":"Administration","items":[{"type":"category","label":"Backups, data export/import","items":[{"type":"link","href":"/docs/postgres-howtos/database-administration/backup-recovery/how-to-speed-up-pg-dump","label":"speed up pg_dump when dumping large databases","docId":"postgres-howtos/database-administration/backup-recovery/how-to-speed-up-pg-dump","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/backup-recovery/how-to-use-pg-restore","label":"use pg_restore","docId":"postgres-howtos/database-administration/backup-recovery/how-to-use-pg-restore","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/backup-recovery/how-to-speed-up-bulk-load","label":"speed up bulk load","docId":"postgres-howtos/database-administration/backup-recovery/how-to-speed-up-bulk-load","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/database-administration/backup-recovery/"},{"type":"category","label":"Configuration","items":[{"type":"link","href":"/docs/postgres-howtos/database-administration/configuration/rough-oltp-configuration-tuning","label":"Rough configuration tuning (80/20 rule; OLTP)","docId":"postgres-howtos/database-administration/configuration/rough-oltp-configuration-tuning","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/configuration/how-to-tune-work-mem","label":"tune work_mem","docId":"postgres-howtos/database-administration/configuration/how-to-tune-work-mem","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/configuration/how-to-perform-postgres-tuning","label":"perform initial / rough PG tuning","docId":"postgres-howtos/database-administration/configuration/how-to-perform-postgres-tuning","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/configuration/how-to-tune-linux-parameters-for-oltp-postgres","label":"tune Linux parameters for OLTP PG","docId":"postgres-howtos/database-administration/configuration/how-to-tune-linux-parameters-for-oltp-postgres","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/configuration/how-to-change-postgres-parameter","label":"change a PG parameter","docId":"postgres-howtos/database-administration/configuration/how-to-change-postgres-parameter","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/database-administration/configuration/"},{"type":"category","label":"Maintenance","items":[{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-deal-with-long-running-transactions-oltp","label":"deal with long-running transactions (OLTP)","docId":"postgres-howtos/database-administration/maintenance/how-to-deal-with-long-running-transactions-oltp","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-use-subtransactions-in-postgres","label":"use subtransactions in PG","docId":"postgres-howtos/database-administration/maintenance/how-to-use-subtransactions-in-postgres","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-deal-with-bloat","label":"deal with bloat","docId":"postgres-howtos/database-administration/maintenance/how-to-deal-with-bloat","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/autovacuum-queue-and-progress","label":"Autovacuum \\"queue\\" and progress","docId":"postgres-howtos/database-administration/maintenance/autovacuum-queue-and-progress","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-run-analyze","label":"run ANALYZE (to collect statistics)","docId":"postgres-howtos/database-administration/maintenance/how-to-run-analyze","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-enable-data-checksums-without-downtime","label":"enable data checksums without downtime","docId":"postgres-howtos/database-administration/maintenance/how-to-enable-data-checksums-without-downtime","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-troubleshoot-and-speedup-postgres-restarts","label":"troubleshoot and speed up PG stop and restart attempts","docId":"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-and-speedup-postgres-restarts","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-troubleshoot-long-startup","label":"troubleshoot long PG startup","docId":"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-long-startup","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/database-administration/maintenance/how-to-troubleshoot-a-growing-pg-wal-directory","label":"troubleshoot a growing pg_wal directory","docId":"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-a-growing-pg-wal-directory","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/database-administration/maintenance/"}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/database-administration/"},{"type":"category","label":"Monitoring & troubleshooting","items":[{"type":"category","label":"System monitoring","items":[{"type":"link","href":"/docs/postgres-howtos/monitoring-troubleshooting/system-monitoring/flamegraphs-for-postgres","label":"troubleshoot PG performance using FlameGraphs and eBPF (or perf)","docId":"postgres-howtos/monitoring-troubleshooting/system-monitoring/flamegraphs-for-postgres","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/monitoring-troubleshooting/system-monitoring/how-to-determine-the-replication-lag","label":"determine the replication lag","docId":"postgres-howtos/monitoring-troubleshooting/system-monitoring/how-to-determine-the-replication-lag","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/monitoring-troubleshooting/system-monitoring/"},{"type":"category","label":"Lock analysis","items":[{"type":"link","href":"/docs/postgres-howtos/monitoring-troubleshooting/lock-analysis/how-to-un
1derstand-what-is-blocking-ddl","label":"understand what\'s blocking DDL","docId":"postgres-howtos/monitoring-troubleshooting/lock-analysis/how-to-understand-what-is-blocking-ddl","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/monitoring-troubleshooting/lock-analysis/"},{"type":"category","label":"Troubleshooting","items":[{"type":"link","href":"/docs/postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-not-get-screwed-as-a-dba","label":"NOT get screwed as a DBA (DBRE)","docId":"postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-not-get-screwed-as-a-dba","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-flush-caches","label":"flush caches (OS page cache and PG buffer pool)","docId":"postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-flush-caches","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/monitoring-troubleshooting/troubleshooting/"}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/monitoring-troubleshooting/"},{"type":"category","label":"Schema design","items":[{"type":"category","label":"DDL operations","items":[{"type":"link","href":"/docs/postgres-howtos/schema-design/ddl-operations/how-to-redefine-a-PK-without-downtime","label":"redefine a PK without downtime","docId":"postgres-howtos/schema-design/ddl-operations/how-to-redefine-a-PK-without-downtime","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/schema-design/ddl-operations/how-to-drop-a-column","label":"drop a column","docId":"postgres-howtos/schema-design/ddl-operations/how-to-drop-a-column","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/schema-design/ddl-operations/how-to-add-a-column","label":"add a column","docId":"postgres-howtos/schema-design/ddl-operations/how-to-add-a-column","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/schema-design/ddl-operations/how-to-add-a-check-constraint-without-downtime","label":"add a CHECK constraint without downtime","docId":"postgres-howtos/schema-design/ddl-operations/how-to-add-a-check-constraint-without-downtime","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/schema-design/ddl-operations/"},{"type":"category","label":"Data types","items":[{"type":"link","href":"/docs/postgres-howtos/schema-design/data-types/how-to-use-uuid","label":"use UUID","docId":"postgres-howtos/schema-design/data-types/how-to-use-uuid","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/schema-design/data-types/uuid-v7-and-partitioning-timescaledb","label":"UUID v7 and partitioning (TimescaleDB)","docId":"postgres-howtos/schema-design/data-types/uuid-v7-and-partitioning-timescaledb","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/schema-design/data-types/how-to-quickly-check-data-type-and-storage-size-of-a-value","label":"quickly check data type and storage size of a value","docId":"postgres-howtos/schema-design/data-types/how-to-quickly-check-data-type-and-storage-size-of-a-value","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/schema-design/data-types/"},{"type":"category","label":"Constraints","items":[{"type":"link","href":"/docs/postgres-howtos/schema-design/constraints/how-to-add-a-foreign-key","label":"add a foreign key","docId":"postgres-howtos/schema-design/constraints/how-to-add-a-foreign-key","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/schema-design/constraints/how-to-remove-a-foreign-key","label":"remove a foreign key","docId":"postgres-howtos/schema-design/constraints/how-to-remove-a-foreign-key","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/schema-design/constraints/how-to-find-int4-pks-with-out-of-range-risks","label":"find int4 PKs with out-of-range risks in a large database","docId":"postgres-howtos/schema-design/constraints/how-to-find-int4-pks-with-out-of-range-risks","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/schema-design/constraints/"}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/schema-design/"},{"type":"category","label":"Development tools","items":[{"type":"category","label":"psql","
1items":[{"type":"link","href":"/docs/postgres-howtos/development-tools/psql/how-to-use-variables-in-psql-scripts","label":"use variables in psql scripts","docId":"postgres-howtos/development-tools/psql/how-to-use-variables-in-psql-scripts","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/psql/learn-about-schema-metadata-via-psql","label":"Learn to work with schema metadata by spying on psql","docId":"postgres-howtos/development-tools/psql/learn-about-schema-metadata-via-psql","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/psql/psql-tuning","label":"psql tuning","docId":"postgres-howtos/development-tools/psql/psql-tuning","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/psql/psql-shortcuts","label":"psql shortcuts","docId":"postgres-howtos/development-tools/psql/psql-shortcuts","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/psql/how-to-plot-graphs-right-in-psql-on-macos-iterm2","label":"plot graphs right in psql on macOS (iTerm2)","docId":"postgres-howtos/development-tools/psql/how-to-plot-graphs-right-in-psql-on-macos-iterm2","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/psql/how-to-make-e-work-in-psql","label":"make \\"\\u001b\\" work in psql on a new machine (\\"editor/nano/vi not found\\")","docId":"postgres-howtos/development-tools/psql/how-to-make-e-work-in-psql","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/psql/how-to-format-text-output-in-psql-scripts","label":"format text output in psql scripts","docId":"postgres-howtos/development-tools/psql/how-to-format-text-output-in-psql-scripts","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/development-tools/psql/"},{"type":"category","label":"SQL techniques","items":[{"type":"link","href":"/docs/postgres-howtos/development-tools/sql-techniques/how-to-import-csv-to-postgres","label":"import CSV to PG","docId":"postgres-howtos/development-tools/sql-techniques/how-to-import-csv-to-postgres","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/sql-techniques/find-or-insert-using-a-single-query","label":"\\"Find-or-insert\\" using a single query","docId":"postgres-howtos/development-tools/sql-techniques/find-or-insert-using-a-single-query","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/sql-techniques/how-to-format-sql","label":"format SQL (SQL style guide)","docId":"postgres-howtos/development-tools/sql-techniques/how-to-format-sql","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/sql-techniques/how-to-generate-fake-data","label":"generate fake data","docId":"postgres-howtos/development-tools/sql-techniques/how-to-generate-fake-data","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/sql-techniques/how-to-use-lib-pgquery-in-shell","label":"use lib_pgquery in shell to normalize and match queries from various sources","docId":"postgres-howtos/development-tools/sql-techniques/how-to-use-lib-pgquery-in-shell","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/development-tools/sql-techniques/"},{"type":"category","label":"Client tools","items":[{"type":"link","href":"/docs/postgres-howtos/development-tools/client-tools/how-to-set-application-name-without-extra-queries","label":"set application_name without extra queries","docId":"postgres-howtos/development-tools/client-tools/how-to-set-application-name-without-extra-queries","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/client-tools/how-to-use-docker-to-run-postgres","label":"use Docker to run PG","docId":"postgres-howtos/development-tools/client-tools/how-to-use-docker-to-run-postgres","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/development-tools/client-tools/how-to-change-ownership-of-all-objects-in-a-database","label":"change ownership of all objects in a database","docId":"postgres-howtos/development-tools/client-tools/how-to-change-ownership-of-all-objects-in-a-database","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/development-tools/client-tools/"}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/development-tools/"},{"type":"category","label":"Advanced topics","items":[{"type":"category","label":"Misc","items":[{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/tuple-sparsity","label":"Understanding how sparsely tuples are stored in a table","docId":"postgres-howtos/advanced-topics/misc/tuple-sparsity","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/lsn-values-and-wal-filenames","label":"understand LSN values and WAL filenames","docId":"postgres-howtos/advanced-topics/misc/lsn-values-and-wal-filenames","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/how-to-use-openai-apis-in-postgres","label":"use OpenAI APIs right from PG to implement semantic search and GPT chat","docId":"postgres-howtos/advanced-topics/misc/how-to-use-openai-apis-in-postgres","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/how-to-install-postgres-16-with-plpython3u","label":"install PG 16 with plpython3u: Recipes for macOS, Ubuntu, Debian, CentOS, Docker","docId":"postgres-howtos/advanced-topics/misc/how-to-install-postgres-16-with-plpython3u","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/how-many-tuples-can-be-inserted-in-a-page","label":"How many tuples can be inserted in a page","docId":"postgres-howtos/advanced-topics/misc/how-many-tuples-can-be-inserted-in-a-page","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/estimate-yoy-table-growth","label":"estimate the YoY growth of a very large table using row creation timestamps and the planner statistics","docId":"postgres-howtos/advanced-topics/misc/estimate-yoy-table-growth","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/how-to-find-the-best-order-of-columns-to-save-on-storage","label":"find the best order of columns to save on storage (\\"Column Tetris\\")","docId":"postgres-howtos/advanced-topics/misc/how-to-find-the-best-order-of-columns-to-save-on-storage","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/how-to-help-others","label":"help others","docId":"postgres-howtos/advanced-topics/misc/how-to-help-others","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/how-to-work-with-metadata","label":"work with metadata","docId":"postgres-howtos/advanced-topics/misc/how-to-work-with-metadata","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/misc/how-to-compile-postgres-on-ubuntu-22.04","label":"compile PG on Ubuntu 22.04","docId":"postgres-howtos/advanced-topics/misc/how-to-compile-postgres-on-ubuntu-22.04","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/advanced-topics/misc/"},{"type":"category","label":"Replication","items":[{"type":"link","href":"/docs/postgres-howtos/advanced-topics/replication/how-to-convert-a-physical-replica-to-logical","label":"convert a physical replica to logical","docId":"postgres-howtos/advanced-topics/replication/how-to-convert-a-physical-replica-to-logical","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/replication/zero-downtime-major-upgrade","label":"PG major upgrade without any downtime for a very large cluster running under heavy load","docId":"postgres-howtos/advanced-topics/replication/zero-downtime-major-upgrade","unlisted":false},{"type":"link","href":"/docs/postgres-howtos/advanced-topics/replication/how-to-troubleshoot-streaming-replication-lag","label":"troubleshoot streaming replication lag","docId":"postgres-howtos/advanced-topics/replication/how-to-troubleshoot-streaming-replication-lag","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/advanced-topics/replication/"}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/advanced-topics/"},{"type":"category","label":"Miscellaneous","items":[{"type":"link","href":"/docs/postgres-howtos/miscellaneous/how-to-get-into-trouble-using-some-postgres-features","label":"get into trouble using some PG features","docId":"postgres-howtos/miscellaneous/how-to-get-into-trouble-using-some-postgres-features","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/postgres-howtos/miscellaneous/"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference guides","items":[{"type":"link","href":"/docs/reference-guides","label":"Overview","docId":"reference-guides/index","unlisted":false},{"type":"link","href":"/docs/reference-guides/postgres-ai-monitoring-reference","label":"postgres_ai monitoring","docId":"reference-guides/postgres-ai-monitoring-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/postgresai-cli-reference","label":"PostgresAI CLI","docId":"reference-guides/postgresai-cli-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/postgres-ai-bot-reference","label":"PostgresAI Assistant tools","docId":"reference-guides/postgres-ai-bot-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/database-lab-engine-components","label":"DBLab components","docId":"reference-guides/database-lab-engine-components","unlisted":false},{"type":"link","href":"/docs/reference-guides/database-lab-engine-api-reference","label":"DBLab API","docId":"reference-guides/database-lab-engine-api-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/dblab-client-cli-reference","label":"Client CLI (dblab)","docId":"reference-guides/dblab-client-cli-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/database-lab-engine-configuration-reference","label":"DBLab Engine configuration","docId":"reference-guides/database-lab-engine-configuration-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/db-migration-checker-configuration-reference","label":"DB Migration Checker configuration","docId":"reference-guides/db-migration-checker-configuration-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/joe-bot-configuration-reference","label":"Joe Bot c
1onfiguration","docId":"reference-guides/joe-bot-configuration-reference","unlisted":false},{"type":"link","href":"/docs/reference-guides/joe-bot-commands-reference","label":"Joe Bot commands","docId":"reference-guides/joe-bot-commands-reference","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"all-features":{"id":"all-features","title":"Database Lab feature matrix","description":"Database Lab by Postgres.ai \u2013\xa0the full list of features."},"checkup/index":{"id":"checkup/index","title":"Overview of postgres-checkup","description":"postgres-checkup \u2013 a powerful tool automating health checks of PostgreSQL databases. Its key features are unobtrusiveness, \\"zero install\\", and complex and deep analysis of a whole PostgreSQL set of nodes (primary plus its followers). With postgres-checkup, an experienced DBA spends only 4 hours instead of 2 weeks analyzing a heavily-loaded PostgreSQL setup when seeing it for the first time."},"data-access/index":{"id":"data-access/index","title":"Overview of data access use case","description":"Better performance for analytics"},"data-recovery/index":{"id":"data-recovery/index","title":"Overview of data recovery use case","description":"Recover accidentally deleted data"},"database-lab/db-migration-checker":{"id":"database-lab/db-migration-checker","title":"DB Migration Checker","description":"Automatically test DB migrations (DDL, DML) in CI/CD pipelines","sidebar":"baseSidebar"},"database-lab/index":{"id":"database-lab/index","title":"DBLab Engine","description":"Tutorials and explanations","sidebar":"baseSidebar"},"database-lab/masking":{"id":"database-lab/masking","title":"Database Lab data masking and obfuscation","description":"Strategies for data anonymization of PostgreSQL databases \u2013 build secure non-production environments.","sidebar":"baseSidebar"},"database-lab/prometheus-monitoring":{"id":"database-lab/prometheus-monitoring","title":"Prometheus monitoring","description":"DBLab Engine exposes Prometheus metrics via the /metrics endpoint. These metrics can be used to monitor the health and performance of the DBLab instance.","sidebar":"baseSidebar"},"database-lab/supported-databases":{"id":"database-lab/supported-databases","title":"PostgreSQL versions and extensions supp
1orted in DBLab Engine","description":"PostgreSQL versions","sidebar":"baseSidebar"},"database-lab/telemetry":{"id":"database-lab/telemetry","title":"Telemetry","description":"Telemetry collected by DBLab Engine and how to control it","sidebar":"baseSidebar"},"database-lab/timing-estimator":{"id":"database-lab/timing-estimator","title":"Query duration difference between Database Lab and production environments","description":"Why there is a difference in query duration between Database Lab and production environments? How to deal with it? What other parameters could be used for the SQL optimization process?"},"database-lab/user-interface":{"id":"database-lab/user-interface","title":"DBLab Engine user interface","description":"Embedded visual interface for interacting with DBLab Engine","sidebar":"baseSidebar"},"dblab-howtos/administration/add-disk-space-to-zfs-pool":{"id":"dblab-howtos/administration/add-disk-space-to-zfs-pool","title":"How to add disk space to a ZFS pool without downtime","description":"Expand a ZFS pool used by DBLab Engine online, with no downtime, by resizing the cloud disk and enabling ZFS autoexpand on Linux.","sidebar":"baseSidebar"},"dblab-howtos/administration/ci-observer-postgres-log-masking":{"id":"dblab-howtos/administration/ci-observer-postgres-log-masking","title":"Masking sensitive data in PostgreSQL logs when using CI Observer","description":"Learn how to configure CI Observer to mask sensitive data in PostgreSQL logs before saving them in Platform\'s centralized storage","sidebar":"baseSidebar"},"dblab-howtos/administration/data/custom":{"id":"dblab-howtos/administration/data/custom","title":"Data source: Custom","description":"Configure DBLab Engine to load data with any Postgres backup tool, such as pg_basebackup, Barman, or pgBackRest, using a custom physical restore command.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/database-rename":{"id":"dblab-howtos/administration/data/database-rename","title":"Rename databases during snapshot creation","description":"Use the databaseRename option in DBLab Engine to expose different database names in clones than in the source, for logical and physical snapshots.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/dump":{"id":"dblab-howtos/administration/data/dump","title":"Data source: pg_dump","description":"Set up DBLab Engine to load data with pg_dump and pg_restore, including multi-database dumps, plain-text and compressed dumps, and direct restore.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/index":{"id":"dblab-howtos/administration/data/index","title":"DBLab data sources","description":"Overview of DBLab Engine data retrieval methods, comparing logical (dump/restore) and physical data sources for thin cloning of Postgres databases.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/pg_basebackup":{"id":"dblab-howtos/administration/data/pg_basebackup","title":"Data source: pg_basebackup","description":"Configure DBLab Engine to build a physical data directory from a Postgres source using pg_basebackup as a custom physical restore tool.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/pgbackrest":{"id":"dblab-howtos/administration/data/pgbackrest","title":"Data source: pgBackRest","description":"Configure DBLab Engine to restore a Postgres data directory from a pgBackRest repository, including stanza, delta restore, and repository settings.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/rds":{"id":"dblab-howtos/administration/data/rds","title":"Data source: AWS RDS","description":"Connect DBLab Engine to an Amazon RDS Postgres database using either master password authentication or IAM database authentication.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/rds-refresh":{"id":"dblab-howtos/administration/data/rds-refresh","title":"Data source: RDS/Aurora refresh","description":"Refresh DBLab Engine from Amazon RDS or Aurora by dumping a temporary RDS clone instead of production, avoiding xmin horizon holds, load, and bloat.","sidebar":"baseSidebar"},"dblab-howtos/administration/data/rsync":{"id":"dblab-howtos/administration/data/rsync","title":"Data source: rsync","description":"Configure DBLab Engine to build a physical Postgres data directory from a source or WAL archive using rsync as a custom physical restore command."},"dblab-howtos/administration/data/wal-g":{"id":"dblab-howtos/administration/data/wal-g","title":"Data source: WAL-G","description":"Configure DBLab Engine to restore a physical Postgres data directory from a WAL-G backup archive, using WAL-G environment variables and settings.","sidebar":"baseSidebar"}
1,"dblab-howtos/administration/engine-manage":{"id":"dblab-howtos/administration/engine-manage","title":"How to manage DBLab Engine","description":"Learn how to configure and maintain DBLab Engine instances to build powerful non-production environments for PostgreSQL.","sidebar":"baseSidebar"},"dblab-howtos/administration/engine-secure":{"id":"dblab-howtos/administration/engine-secure","title":"Secure DBLab Engine","description":"Secure the DBLab Engine UI, API, CLI, and database clones with an Envoy proxy and a Let\'s Encrypt SSL certificate for encrypted HTTPS access.","sidebar":"baseSidebar"},"dblab-howtos/administration/index":{"id":"dblab-howtos/administration/index","title":"DBLab Engine administration","description":"Guides for installing, configuring, securing, and maintaining DBLab Engine, managing Joe Bot, and refreshing data for Postgres environments.","sidebar":"baseSidebar"},"dblab-howtos/administration/install-database-lab-with-terraform":{"id":"dblab-howtos/administration/install-database-lab-with-terraform","title":"How to install Database Lab with Terraform on AWS","description":"Terraform is no longer supported for installing DBLab Engine. Use the PostgresAI Console or the AWS Marketplace to install DBLab instead."},"dblab-howtos/administration/install-dle-from-aws-marketplace":{"id":"dblab-howtos/administration/install-dle-from-aws-marketplace","title":"How to install DBLab using the AWS Marketplace","description":"Install DBLab Engine from the AWS Marketplace to get instant database branching and thin clones for RDS, RDS Aurora, and any Postgres source.","sidebar":"baseSidebar"},"dblab-howtos/administration/install-dle-from-postgres-ai":{"id":"dblab-howtos/administration/install-dle-from-postgres-ai","title":"How to install DBLab using the PostgresAI Console","description":"Install DBLab Standard Edition in your own cloud or on-premises infrastructure in minutes using the PostgresAI Console, with vendor support included.","sidebar":"baseSidebar"},"dblab-howtos/administration/install-dle-manually":{"id":"dblab-howtos/administration/install-dle-manually","title":"How to install DBLab manually","description":"Step-by-step guide to manually install DBLab Engine Community Edition on Ubuntu with Docker and ZFS or LVM for thin cloning of Postgres databases.","sidebar":"baseSidebar"},"dblab-howtos/administration/joe-manage":{"id":"dblab-howtos/administration/joe-manage","title":"How to manage Joe Bot","description":"Start, reconfigure, upgrade, and monitor the Joe Bot container for SQL optimization on DBLab Engine clones, and check its status and logs.","sidebar":"baseSidebar"},"dblab-howtos/administration/logical-full-refresh":{"id":"dblab-howtos/administration/logical-full-refresh","title":"How to refresh data when working in the \\"logical\\" mode","description":"How to fully refresh data in DBLab Engine when using the \\"logical\\" provisioning mode, both manually on a single disk and automatically without downtime.","sidebar":"baseSidebar"},"dblab-howtos/administration/postgresql-configuration":{"id":"dblab-howtos/administration/postgresql-configuration","title":"How to configure PostgreSQL used by DBLab Engine","description":"How to configure Postgres instances managed by DBLab Engine, including shared_buffers, work_mem, and query planning settings for accurate clones.","sidebar":"baseSidebar"},"dblab-howtos/administration/run-database-lab-on-mac":{"id":"dblab-howtos/administration/run-database-lab-on-mac","title":"How to run DBLab Engine on macOS","description":"Run DBLab Engine 4.1+ with full ZFS support on Intel or Apple Silicon macOS using Colima, a lightweight Linux VM with Docker.","sidebar":"baseSidebar"},"dblab-howtos/administration/teleport-integration":{"id":"dblab-howtos/administration/teleport-integration","title":"Teleport integration","description":"Integrate DBLab Engine 4.1+ with Teleport for secure, audited, certificate-based access to Postgres database clones with role-based access control, including per-user clone access and custom resource labels (4.2+).","sidebar":"baseSidebar"},"dblab-howtos/branching/create-branch":{"id":"dblab-howtos/branching/create-branch","title":"How to create a database branch","description":"Create a database branch in DBLab Engine from the GUI or the dblab CLI, including branching from a specific parent branch or snapshot ID.","sidebar":"baseSidebar"},"dblab-howtos/branching/delete-branch":{"id":"dblab-howtos/branching/delete-branch","title":"How to delete a database branch","description":"Delete a database branch in DBLab Engine from the GUI, the dblab branch command, or the API; protect a branch from deletion or let the retention policy expire unused branches automatically (DBLab Engine 4.2+).","sidebar":"baseSidebar"},"dblab-howtos/branching/index":{"id":"dblab-howtos/branching/index","title":"How to work with database branches","description":"Guides for working with database branches in DBLab Engine, including how to create and delete branches and build preview environments with Coolify.","sidebar":"baseSidebar"},"dblab-howtos/branching/preview-environments-with-dblab-and-coolify":{"id":"dblab-howtos/branching/preview-environments-with-dblab-and-coolify","title":"How to set up full-stack preview environments with DBLab, C
1oolify and GitHub","description":"Set up automated full-stack preview environments that provision an isolated Postgres clone with DBLab and deploy with Coolify for every GitHub pull request.","sidebar":"baseSidebar"},"dblab-howtos/cli/cli-install-init":{"id":"dblab-howtos/cli/cli-install-init","title":"How to install and initialize DBLab CLI","description":"Install the DBLab CLI, optionally connect over an SSH tunnel, and initialize it with your instance URL and token to run dblab commands against DBLab Engine.","sidebar":"baseSidebar"},"dblab-howtos/cli/index":{"id":"dblab-howtos/cli/index","title":"How to work with DBLab CLI","description":"Guides for working with the DBLab CLI, including how to install and initialize the dblab client to manage clones and branches from the command line.","sidebar":"baseSidebar"},"dblab-howtos/cloning/clone-protection":{"id":"dblab-howtos/cloning/clone-protection","title":"Protect clones from manual and automatic deletion","description":"Protect DBLab clones from manual and automatic deletion, including time-limited protection leases in DBLab Engine 4.1+, from the GUI, CLI, or API.","sidebar":"baseSidebar"},"dblab-howtos/cloning/clone-upgrade":{"id":"dblab-howtos/cloning/clone-upgrade","title":"How to perform a Postgres major upgrade in a DBLab clone","description":"Upgrade a single DBLab clone to a newer Postgres major version with one command (dblab clone upgrade, the UI, or the API) to rehearse a production upgrade on real data. DBLab Engine 4.2+.","sidebar":"baseSidebar"},"dblab-howtos/cloning/connect-clone":{"id":"dblab-howtos/cloning/connect-clone","title":"How to connect to a DBLab clone","description":"Connect to a DBLab clone with psql or JDBC, directly or over SSH port forwarding, using the connection info from the GUI or the dblab clone status command.","sidebar":"baseSidebar"},"dblab-howtos/cloning/create-clone":{"id":"dblab-howtos/cloning/create-clone","title":"How to create a DBLab clone","description":"Create a thin DBLab clone from the GUI or the dblab CLI, including choosing a snapshot or branch, protecting the clone, and setting extra Postgres config.","sidebar":"baseSidebar"},"dblab-howtos/cloning/destroy-clone":{"id":"dblab-howtos/cloning/destroy-clone","title":"How to destroy a DBLab clone","description":"Destroy a DBLab clone from the GUI or with the dblab clone destroy command, synchronously or asynchronously, to free up disk space when work is done.","sidebar":"baseSidebar"},"dblab-howtos/cloning/index":{"id":"dblab-howtos/cloning/index","title":"How to work with DBLab clones","description":"Guides for working with DBLab clones, including how to create, connect to, reset, destroy, protect, and run a Postgres major upgrade in a clone.","sidebar":"baseSidebar"},"dblab-howtos/cloning/reset-clone":{"id":"dblab-howtos/cloning/reset-clone","title":"How to reset a DBLab clone\'s state","description":"Reset a DBLab clone to its initial snapshot state from the web UI or the DBLab CLI, discarding all changes made during testing on the clone.","sidebar":"baseSidebar"},"dblab-howtos/index":{"id":"dblab-howtos/index","title":"DBLab how-to guides","description":"Step-by-step DBLab how-to guides for installing DBLab Engine, cloning and branching Postgres databases, managing snapshots, using Joe bot, and more.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/count-rows":{"id":"dblab-howtos/joe-bot/count-rows","title":"How to get row counts for arbitrary SELECTs","description":"Use Joe bot and EXPLAIN with actual execution to get exact row counts for any SELECT on production-like data, without direct access to the source database.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/create-index":{"id":"dblab-howtos/joe-bot/create-index","title":"How to create an index using Joe bot","description":"Create indexes and change the database schema safely with Joe bot\'s exec command on independent Postgres clones, including HypoPG hypothetical indexes.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/get-database-table-index-size":{"id":"dblab-howtos/joe-bot/get-database-table-index-size","t
1itle":"How to get sizes of PostgreSQL databases, tables, and indexes with psql commands","description":"Use Joe bot and psql meta-commands to get the size of Postgres databases, tables, indexes, views, and materialized views without direct database access.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/get-query-plan":{"id":"dblab-howtos/joe-bot/get-query-plan","title":"How to get a query execution plan (EXPLAIN)","description":"Get a Postgres EXPLAIN plan with actual execution using Joe bot, including buffer counts, row counts, and timing, on an independent thin clone.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/index":{"id":"dblab-howtos/joe-bot/index","title":"How to work with Joe chatbot","description":"How-to guides for Joe bot: get Postgres EXPLAIN plans, create indexes, reset sessions, manage long-running queries, and work with SQL optimization history.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/query-activity-and-termination":{"id":"dblab-howtos/joe-bot/query-activity-and-termination","title":"How to get a list of active queries in a Joe session and stop long-running queries","description":"Use Joe bot\'s activity command to list active Postgres queries in a session and the terminate command to stop long-running queries by PID.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/reset-session":{"id":"dblab-howtos/joe-bot/reset-session","title":"How to reset a Joe session","description":"Reset a Joe chatbot session to its initial state with the reset command, restoring the underlying DBLab clone and discarding all changes you made.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/sql-optimization-history":{"id":"dblab-howtos/joe-bot/sql-optimization-history","title":"How to work with SQL optimization history","de
1scription":"Search, filter, share, and bookmark past Joe bot commands in the PostgresAI Platform SQL optimization history, including finding similar Postgres queries.","sidebar":"baseSidebar"},"dblab-howtos/joe-bot/visualize-query-plan":{"id":"dblab-howtos/joe-bot/visualize-query-plan","title":"How to visualize a query plan","description":"Visualize a Postgres query plan with Joe bot using Explain Depesz, PEV2, or FlameGraph, from SQL optimization history or the Plan visualization page.","sidebar":"baseSidebar"},"dblab-howtos/platform/audit-logs":{"id":"dblab-howtos/platform/audit-logs","title":"Audit logs and SIEM integration","description":"View audit logs of critical events in the PostgresAI Platform and forward them to a SIEM such as Splunk or IBM QRadar for security monitoring and compliance.","sidebar":"baseSidebar"},"dblab-howtos/platform/index":{"id":"dblab-howtos/platform/index","title":"DBLab Platform","description":"Guides for the DBLab Platform: start using it, create and use access tokens, complete the onboarding checklist, and set up audit logs and SIEM.","sidebar":"baseSidebar"},"dblab-howtos/platform/onboarding":{"id":"dblab-howtos/platform/onboarding","title":"DBLab Platform onboarding checklist","description":"Onboarding checklist for the DBLab Platform: try Joe for SQL optimization, postgres-checkup reports, and DBLab Engine clones via the GUI, API, and CLI.","sidebar":"baseSidebar"},"dblab-howtos/platform/start-using-platform":{"id":"dblab-howtos/platform/start-using-platform","title":"Start using Database Lab (PostgresAI) Platform","description":"Sign in to the PostgresAI Platform, create or join an organization, and choose how to begin: the Database Lab tutorial or the postgres-checkup tool.","sidebar":"baseSidebar"},"dblab-howtos/platform/tokens":{"id":"dblab-howtos/platform/tokens","title":"Create and use DBLab Platform access tokens","description":"Create, use, and revoke personal and administrative access tokens for DBLab Engine and the DBLab Platform, and enable personal token support.","sidebar":"baseSidebar"},"dblab-howtos/snapshots/create-snapshot":{"id":"dblab-howtos/snapshots/create-snapshot","title":"How to create a snapshot","description":"Create a DBLab Engine snapshot from an existing clone or from the current pool state using the GUI or the dblab CLI (dblab commit, dblab snapshot create).","sidebar":"baseSidebar"},"dblab-howtos/snapshots/delete-snapshot":{"id":"dblab-howtos/snapshots/delete-snapshot","title":"How to delete a snapshot","description":"Delete a DBLab Engine snapshot using the GUI, the dblab CLI, or the API; force-delete snapshots with dependent clones; protect a snapshot from deletion or let the retention policy expire unused snapshots automatically (DBLab Engine 4.2+).","sidebar":"baseSidebar"},"dblab-howtos/snapshots/index":{"id":"dblab-howtos/snapshots/index","title":"How to work with snapshots","description":"How to work with DBLab Engine snapshots: create and delete snapshots using the GUI, the dblab CLI, or the API.","sidebar":"baseSidebar"},"get-started":{"id":"get-started","title":"PostgresAI documentation","description":"PostgresAI is building Self-Driving Postgres. Your database monitors itself, diagnoses problems, tests fixes, and hands you a PR. AI watches, diagnoses, suggests; you approve, you merge.","sidebar":"baseSidebar"},"joe-bot/example":{"id":"joe-bot/example","title":"Joe bot demo and example","description":"Demonstration","sidebar":"baseSidebar"},"joe-bot/index":{"id":"joe-bot/index","title":"Joe bot","description":"Summary","sidebar":"baseSidebar"},"monitoring/advanced/architecture":{"id":"monitoring/advanced/architecture","title":"Architecture","description":"Deep-dive into PostgresAI monitoring system components and data flow.","sidebar":"baseSidebar"},"monitoring/advanced/index":{"id":"monitoring/advanced/index","title":"Advanced topics","description":"Advanced configuration and integration guides for PostgresAI monitoring.","sidebar":"baseSidebar"},"monitoring/advanced/multi-cluster":{"id":"monitoring/advanced/multi-cluster","title":"Multi-cluster monitoring","description":"Centralized monitoring for multiple PostgreSQL clusters from a single Grafana instance.","sidebar":"baseSidebar"},"monitoring/advanced/security":{"id":"monitoring/advanced/security","title":"Monitoring security","de
1scription":"Security model and hardening options for the self-hosted monitoring stack. Several of these","sidebar":"baseSidebar"},"monitoring/advanced/telemetry":{"id":"monitoring/advanced/telemetry","title":"Monitoring telemetry","description":"New in 0.15. Self-hosted monitoring instances include an optional telemetry reporter that","sidebar":"baseSidebar"},"monitoring/configuration/alerting":{"id":"monitoring/configuration/alerting","title":"Alerting configuration","description":"PostgresAI monitoring 0.15.0 does not ship any alert rules, an Alertmanager service, or a","sidebar":"baseSidebar"},"monitoring/configuration/grafana-config":{"id":"monitoring/configuration/grafana-config","title":"Grafana configuration","description":"Configuration for Grafana dashboards and visualization.","sidebar":"baseSidebar"},"monitoring/configuration/index":{"id":"monitoring/configuration/index","title":"Configuration","description":"Configuration guides for customizing PostgresAI monitoring components.","sidebar":"baseSidebar"},"monitoring/configuration/pgwatch-config":{"id":"monitoring/configuration/pgwatch-config","title":"pgwatch configuration","description":"Configuration options for the pgwatch metrics collectors.","sidebar":"baseSidebar"},"monitoring/configuration/prometheus-config":{"id":"monitoring/configuration/prometheus-config","title":"Prometheus/VictoriaMetrics configuration","description":"Configuration for the time-series database storing monitoring metrics.","sidebar":"baseSidebar"},"monitoring/dashboards/autovacuum":{"id":"monitoring/dashboards/autovacuum","title":"07. Autovacuum and xmin horizon","description":"Monitor autovacuum activity, transaction ID / MultiXID wraparound risk, and \u2014 new in 0.15 \u2014 the","sidebar":"baseSidebar"},"monitoring/dashboards/backups":{"id":"monitoring/dashboards/backups","title":"05. WAL, backups, DR","description":"Monitor backup status, WAL archiving, and disaster recovery readiness.","sidebar":"baseSidebar"},"monitoring/dashboards/index":{"id":"monitoring/dashboards/index","title":"Dashboard overview","description":"PostgresAI monitoring includes 14 pre-built Grafana dashboards designed for expert-level PostgreSQL troubleshooting.","sidebar":"baseSidebar"},"monitoring/dashboards/index-health":{"id":"monitoring/dashboards/index-health","title":"10. Aggregated index analysis","description":"Overview of index health, usage, and efficiency across all indexes.","sidebar":"baseSidebar"},"monitoring/dashboards/io-statistics":{"id":"monitoring/dashboards/io-statistics","title":"14. I/O statistics (pg_stat_io)","description":"New in 0.15. Monitor PostgreSQL I/O activity broken down by backend type using the","sidebar":"baseSidebar"},"monitoring/dashboards/lock-contention":{"id":"monitoring/dashboards/lock-contention","title":"13. Lock contention","description":"Monitor lock waits and identify blocking chains.","sidebar":"baseSidebar"},"monitoring/dashboards/node-overview":{"id":"monitoring/dashboards/node-overview","title":"01. Single node performance overview (high level)","description":"High-level dashboard for quick triage and overall database health assessment.","sidebar":"baseSidebar"},"monitoring/dashboards/query-analysis":{"id":"monitoring/dashboards/query-analysis","title":"02. Query performance analysis (top-N)","description":"Comprehensive query performance dashboard showing top queries by various metrics.","sidebar":"baseSidebar"},"monitoring/dashboards/replication":{"id":"monitoring/dashboards/replication","title":"06. Replication","description":"Monitor streaming replication, replication lag, and high availability status.","sidebar":"baseSidebar"},"monitoring/dashboards/self-monitoring":{"id":"monitoring/dashboards/self-monitoring","title":"Self-monitoring","description":"Monitor the health of the monitoring stack itself.","sidebar":"baseSidebar"},"monitoring/dashboards/single-index":{"id":"monitoring/dashboards/single-index","title":"11. Single index analysis","description":"Detailed analysis of a specific index\'s usage and health.","sidebar":"baseSidebar"},"monitoring/dashboards/single-query":{"id":"monitoring/dashboards/single-query","title":"03. Single queryid analysis","description":"Detailed analysis of a specific query identified by its queryid.","sidebar":"baseSidebar"},"monitoring/dashboards/single-table":{"id":"monitoring/dashboards/single-table","t
1itle":"09. Single table analysis","description":"Detailed analysis of a specific table\'s performance and health metrics.","sidebar":"baseSidebar"},"monitoring/dashboards/slru":{"id":"monitoring/dashboards/slru","title":"12. SLRU cache stats","description":"Monitor Simple LRU (SLRU) cache performance for PostgreSQL internal structures.","sidebar":"baseSidebar"},"monitoring/dashboards/table-stats":{"id":"monitoring/dashboards/table-stats","title":"08. Aggregated table analysis","description":"Overview of table-level metrics across all tables in the database.","sidebar":"baseSidebar"},"monitoring/dashboards/wait-events":{"id":"monitoring/dashboards/wait-events","title":"04. Wait event analysis (Active Session History)","description":"Active Session History (ASH) style dashboard for deep wait event analysis.","sidebar":"baseSidebar"},"monitoring/getting-started/index":{"id":"monitoring/getting-started/index","title":"Quick start","description":"Get PostgresAI monitoring running in minutes with PostgresAI Cloud.","sidebar":"baseSidebar"},"monitoring/getting-started/installation-cli":{"id":"monitoring/getting-started/installation-cli","title":"CLI installation","description":"The fastest way to get PostgresAI monitoring running locally.","sidebar":"baseSidebar"},"monitoring/getting-started/installation-cloud":{"id":"monitoring/getting-started/installation-cloud","title":"Cloud installation","description":"Configure PostgresAI monitoring for managed PostgreSQL services.","sidebar":"baseSidebar"},"monitoring/getting-started/installation-docker":{"id":"monitoring/getting-started/installation-docker","title":"Docker Compose installation","description":"For custom deployments and development environments.","sidebar":"baseSidebar"},"monitoring/getting-started/installation-helm":{"id":"monitoring/getting-started/installation-helm","title":"Helm installation","description":"Kubernetes deployment with Helm is the recommended path for production and Enterprise use. The chart","sidebar":"baseSidebar"},"monitoring/getting-started/quickstart-rds-privatelink":{"id":"monitoring/getting-started/quickstart-rds-privatelink","title":"Quick start for Amazon RDS over AWS PrivateLink","description":"Set up PostgresAI monitoring for a private Amazon RDS database \u2014 one that has no","sidebar":"baseSidebar"},"monitoring/getting-started/quickstart-supabase":{"id":"monitoring/getting-started/quickstart-supabase","title":"Quick start for Supabase","description":"Set up PostgresAI monitoring for your Supabase databases using the built-in Supabase integration in","sidebar":"baseSidebar"},"monitoring/getting-started/requirements":{"id":"monitoring/getting-started/requirements","title":"System requirements","description":"PostgreSQL requirements","sidebar":"baseSidebar"},"monitoring/getting-started/upgrade":{"id":"monitoring/getting-started/upgrade","title":"Upgrading the monitoring stack","description":"This page covers upgrading an existing self-hosted monitoring stack to a newer PostgresAI","sidebar":"baseSidebar"},"monitoring/index":{"id":"monitoring/index","title":"PostgresAI monitoring overview","description":"Expert-level Postgres monitoring tool designed for humans and AI systems","sidebar":"baseSidebar"},"monitoring/metrics/index":{"id":"monitoring/metrics/index","title":"Metrics reference","description":"Reference documentation for all metrics collected by PostgresAI monitoring.","sidebar":"baseSidebar"},"monitoring/metrics/index-metrics":{"id":"monitoring/metrics/index-metrics","title":"Index metrics","description":"Index usage and health metrics. In this stack the usage metric reads pg_stat_all_indexes","sidebar":"baseSidebar"},"monitoring/metrics/pg-stat-statements":{"id":"monitoring/metrics/pg-stat-statements","title":"pg_stat_statements metrics","description":"Query-level performance metrics from the pgstatstatements extension.","sidebar":"baseSidebar"},"monitoring/metrics/system-metrics":{"id":"monitoring/metrics/system-metrics","title":"Database- and cluster-level metrics","description":"PostgreSQL system-level metrics. In this stack they are exported by the db_stats, bgwriter,","sidebar":"baseSidebar"},"monitoring/metrics/table-metrics":{"id":"monitoring/metrics/table-metrics","title":"Table metrics","description":"Table-level statistics. In this stack they come from the table_stats metric group, whose query","sidebar":"baseSidebar"},"monitoring/metrics/wait-events":{"id":"monitoring/metrics/wait-events","title":"Wait event metrics","description":"Active session history and wait event metrics from pgstatactivity.","sidebar":"baseSidebar"},"monitoring/troubleshooting/index":{"id":"monitoring/troubleshooting/index","title":"Troubleshooting","description":"Guides for diagnosing and resolving common PostgresAI monitoring issues.","sidebar":"baseSidebar"},"monitoring/troubleshooting/no-data":{"id":"monitoring/troubleshooting/no-data","title":"No data troubleshooting","description":"Diagnosing and fixing \\"No data\\" issues in PostgresAI dashboards.","sidebar":"baseSidebar"},"monitoring/troubleshooting/performance":{"id":"monitoring/troubleshooting/performance","title":"Performance tuning","description":"Optimizing PostgresAI monitoring for better performance and lower resource usage.","sidebar":"baseSidebar"},"monitoring/troubleshooting/permissions":{"id":"monitoring/troubleshooting/permissions","title":"Permission errors","description":"Resolving access denied and permission issues in PostgresAI monitoring.","sidebar":"baseSidebar"},"platform/index":{"id":"platform/index","title":"DBLab Platform overview","description":"Summary","sidebar":"baseSidebar"},"platform/security":{"id":"platform/security","title":"DBLab Platform security","de
1scription":"DBLab Platform and its components are developed with a strong focus on security. To ensure that your data is secure, please carefully read this document.","sidebar":"baseSidebar"},"platform/service-providers":{"id":"platform/service-providers","title":"3rd-party data subprocessors and service providers","description":"Effective date: 2026-02-10"},"postgres-howtos/advanced-topics/index":{"id":"postgres-howtos/advanced-topics/index","title":"Advanced topics","description":"Deep dives into PostgreSQL internals, extensions, and advanced features.","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/estimate-yoy-table-growth":{"id":"postgres-howtos/advanced-topics/misc/estimate-yoy-table-growth","title":"How to estimate the YoY growth of a very large table using row creation timestamps and the planner statistics","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/how-many-tuples-can-be-inserted-in-a-page":{"id":"postgres-howtos/advanced-topics/misc/how-many-tuples-can-be-inserted-in-a-page","title":"How many tuples can be inserted in a page","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/how-to-compile-postgres-on-ubuntu-22.04":{"id":"postgres-howtos/advanced-topics/misc/how-to-compile-postgres-on-ubuntu-22.04","title":"How to compile Postgres on Ubuntu 22.04","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/how-to-find-the-best-order-of-columns-to-save-on-storage":{"id":"postgres-howtos/advanced-topics/misc/how-to-find-the-best-order-of-columns-to-save-on-storage","title":"How to find the best order of columns to save on storage (\\"Column Tetris\\")","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/how-to-help-others":{"id":"postgres-howtos/advanced-topics/misc/how-to-help-others","title":"How to help others","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/how-to-install-postgres-16-with-plpython3u":{"id":"postgres-howtos/advanced-topics/misc/how-to-install-postgres-16-with-plpython3u","title":"How to install Postgres 16 with plpython3u: Recipes for macOS, Ubuntu, Debian, CentOS, Docker","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/how-to-use-openai-apis-in-postgres":{"id":"postgres-howtos/advanced-topics/misc/how-to-use-openai-apis-in-postgres","title":"How to use OpenAI APIs right from Postgres to implement semantic search and GPT chat","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/how-to-work-with-metadata":{"id":"postgres-howtos/advanced-topics/misc/how-to-work-with-metadata","title":"How to work with metadata","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/index":{"id":"postgres-howtos/advanced-topics/misc/index","title":"Miscellaneous","description":"Various advanced PostgreSQL topics that don\'t fit into specific categories","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/lsn-values-and-wal-filenames":{"id":"postgres-howtos/advanced-topics/misc/lsn-values-and-wal-filenames","title":"How to understand LSN values and WAL filenames","description":"How to read LSN values","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/misc/tuple-sparsity":{"id":"postgres-howtos/advanced-topics/misc/tuple-sparsity","title":"Understanding how sparsely tuples are stored in a table","description":"Today, we\'ll discuss tuples and their locations in pages \u2013 this is quite entry-level material but useful in many cases.","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/replication/how-to-convert-a-physical-replica-to-logical":{"id":"postgres-howtos/advanced-topics/replication/how-to-convert-a-physical-replica-to-logical","title":"How to convert a physical replica to logical","description":"","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/replication/how-to-troubleshoot-streaming-replication-lag":{"id":"postgres-howtos/advanced-topics/replication/how-to-troubleshoot-streaming-replication-lag","title":"How to troubleshoot streaming replication lag","description":"Learn how to troubleshoot streaming replication lag","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/replication/index":{"id":"postgres-howtos/advanced-topics/replication/index","title":"Replication","description":"Replication setup, monitoring, and troubleshooting","sidebar":"baseSidebar"},"postgres-howtos/advanced-topics/replication/zero-downtime-major-upgrade":{"id":"postgres-howtos/advanced-topics/replication/zero-downtime-major-upgrade","title":"Postgres major upgrade without any downtime for a very large cluster running under heavy load","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/backup-recovery/how-to-speed-up-bulk-load":{"id":"postgres-howtos/database-administration/backup-recovery/how-to-speed-up-bulk-load","title":"How to speed up bulk load","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/backup-recovery/how-to-speed-up-pg-dump":{"id":"postgres-howtos/database-administration/backup-recovery/how-to-speed-up-pg-dump","title":"How to speed up pg_dump when dumping large databases","description":"After a series of rather hefty posts, let\'s take a breather with some lighter material.","sidebar":"baseSidebar"},"postgres-howtos/database-administration/backup-recovery/how-to-use-pg-restore":{"i
1d":"postgres-howtos/database-administration/backup-recovery/how-to-use-pg-restore","title":"How to use pg_restore","description":"Today \u2013 a few tips on using `pg_restore` to restore databases (or only parts of them) from dumps.","sidebar":"baseSidebar"},"postgres-howtos/database-administration/backup-recovery/index":{"id":"postgres-howtos/database-administration/backup-recovery/index","title":"Backups, data export/import","description":"Backup strategies, recovery procedures, and data migration techniques","sidebar":"baseSidebar"},"postgres-howtos/database-administration/configuration/how-to-change-postgres-parameter":{"id":"postgres-howtos/database-administration/configuration/how-to-change-postgres-parameter","title":"How to change a Postgres parameter","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/configuration/how-to-perform-postgres-tuning":{"id":"postgres-howtos/database-administration/configuration/how-to-perform-postgres-tuning","title":"How to perform initial / rough Postgres tuning","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/configuration/how-to-tune-linux-parameters-for-oltp-postgres":{"id":"postgres-howtos/database-administration/configuration/how-to-tune-linux-parameters-for-oltp-postgres","title":"How to tune Linux parameters for OLTP Postgres","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/configuration/how-to-tune-work-mem":{"id":"postgres-howtos/database-administration/configuration/how-to-tune-work-mem","title":"How to tune work_mem","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/configuration/index":{"id":"postgres-howtos/database-administration/configuration/index","title":"Configuration","description":"PostgreSQL and system configuration for optimal performance","sidebar":"baseSidebar"},"postgres-howtos/database-administration/configuration/rough-oltp-configuration-tuning":{"id":"postgres-howtos/database-administration/configuration/rough-oltp-configuration-tuning","title":"Rough configuration tuning (80/20 rule; OLTP)","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/index":{"id":"postgres-howtos/database-administration/index","title":"Administration","description":"Essential guides for PostgreSQL database administrators covering maintenance, backups, and configuration.","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/autovacuum-queue-and-progress":{"id":"postgres-howtos/database-administration/maintenance/autovacuum-queue-and-progress","title":"Autovacuum \\"queue\\" and progress","description":"Monitor and manage autovacuum queue, understand worker activity and vacuum progress","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-deal-with-bloat":{"id":"postgres-howtos/database-administration/maintenance/how-to-deal-with-bloat","title":"How to deal with bloat","description":"Detect, measure, and eliminate table and index bloat to maintain database health","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-deal-with-long-running-transactions-oltp":{"id":"postgres-howtos/database-administration/maintenance/how-to-deal-with-long-running-transactions-oltp","title":"How to deal with long-running transactions (OLTP)","description":"Identify and handle long-running transactions that can impact OLTP system performance","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-enable-data-checksums-without-downtime":{"id":"postgres-howtos/database-administration/maintenance/how-to-enable-data-checksums-without-downtime","title":"How to enable data checksums without downtime","description":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-run-analyze":{"id":"postgres-howtos/database-administration/maintenance/how-to-run-analyze","title":"How to run ANALYZE (to collect statistics)","description":"Learn how to how to run analyze (to collect statistics)","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-a-growing-pg-wal-directory":{"id":"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-a-growing-pg-wal-directory","title":"How to troubleshoot a growing pg_wal directory","de
1scription":"","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-and-speedup-postgres-restarts":{"id":"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-and-speedup-postgres-restarts","title":"How to troubleshoot and speed up Postgres stop and restart attempts","description":"Some very popular reasons affecting the duration of the shutdown attempt:","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-long-startup":{"id":"postgres-howtos/database-administration/maintenance/how-to-troubleshoot-long-startup","title":"How to troubleshoot long Postgres startup","description":"or:","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/how-to-use-subtransactions-in-postgres":{"id":"postgres-howtos/database-administration/maintenance/how-to-use-subtransactions-in-postgres","title":"How to use subtransactions in Postgres","description":"Understand subtransactions, savepoints, and their impact on database performance","sidebar":"baseSidebar"},"postgres-howtos/database-administration/maintenance/index":{"id":"postgres-howtos/database-administration/maintenance/index","title":"Maintenance","description":"Database maintenance tasks, vacuum strategies, and bloat management","sidebar":"baseSidebar"},"postgres-howtos/development-tools/client-tools/how-to-change-ownership-of-all-objects-in-a-database":{"id":"postgres-howtos/development-tools/client-tools/how-to-change-ownership-of-all-objects-in-a-database","title":"How to change ownership of all objects in a database","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/client-tools/how-to-set-application-name-without-extra-queries":{"id":"postgres-howtos/development-tools/client-tools/how-to-set-application-name-without-extra-queries","title":"How to set application_name without extra queries","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/client-tools/how-to-use-docker-to-run-postgres":{"id":"postgres-howtos/development-tools/client-tools/how-to-use-docker-to-run-postgres","title":"How to use Docker to run Postgres","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/client-tools/index":{"id":"postgres-howtos/development-tools/client-tools/index","title":"Client tools","description":"PostgreSQL client tools and utilities","sidebar":"baseSidebar"},"postgres-howtos/development-tools/index":{"id":"postgres-howtos/development-tools/index","title":"Development tools","description":"Essential tools and techniques for PostgreSQL developers.","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/how-to-format-text-output-in-psql-scripts":{"id":"postgres-howtos/development-tools/psql/how-to-format-text-output-in-psql-scripts","title":"How to format text output in psql scripts","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/how-to-make-e-work-in-psql":{"id":"postgres-howtos/development-tools/psql/how-to-make-e-work-in-psql","title":"How to make \\"\\u001b\\" work in psql on a new machine (\\"editor/nano/vi not found\\")","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/how-to-plot-graphs-right-in-psql-on-macos-iterm2":{"id":"postgres-howtos/development-tools/psql/how-to-plot-graphs-right-in-psql-on-macos-iterm2","title":"How to plot graphs right in psql on macOS (iTerm2)","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/how-to-use-variables-in-psql-scripts":{"id":"postgres-howtos/development-tools/psql/how-to-use-variables-in-psql-scripts","title":"How to use variables in psql scripts","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/index":{"id":"postgres-howtos/development-tools/psql/index","title":"psql","description":"Master the PostgreSQL command-line interface","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/learn-about-schema-metadata-via-psql":{"id":"postgres-howtos/development-tools/psql/learn-about-schema-metadata-via-psql","title":"Learn how to work with schema metadata by spying after psql","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/psql-shortcuts":{"id":"postgres-howtos/development-tools/psql/psql-shortcuts","title":"psql shortcuts","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/psql/psql-tuning":{"id":"postgres-howtos/development-tools/psql/psql-tuning","title":"psql tuning","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/sql-techniques/find-or-insert-using-a-single-query":{"id":"postgres-howtos/development-tools/sql-techniques/find-or-insert-using-a-single-query","title":"\\"Find-or-insert\\" using a single query","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/sql-techniques/how-to-format-sql":{"id":"postgres-howtos/development-tools/sql-techniques/how-to-format-sql","title":"How to format SQL (SQL style guide)","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/sql-techniques/how-to-generate-fake-data":{"id":"postgres-howtos/development-tools/sql-techniques/how-to-generate-fake-data","title":"How to generate fake data","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/sql-techniques/how-to-import-csv-to-postgres":{"id":"postgres-howtos/development-tools/sql-techniques/how-to-import-csv-to-postgres","title":"How to import CSV to Postgres","description":"## Source CSV we\'ll be using as an example","sidebar":"baseSidebar"},"postgres-howtos/development-tools/sql-techniques/how-to-use-lib-pgquery-in-shell":{"i
1d":"postgres-howtos/development-tools/sql-techniques/how-to-use-lib-pgquery-in-shell","title":"How to use lib_pgquery in shell to normalize and match queries from various sources","description":"","sidebar":"baseSidebar"},"postgres-howtos/development-tools/sql-techniques/index":{"id":"postgres-howtos/development-tools/sql-techniques/index","title":"SQL techniques","description":"Advanced SQL patterns and query techniques","sidebar":"baseSidebar"},"postgres-howtos/index":{"id":"postgres-howtos/index","title":"Postgres how-to guides","description":"How-to guides for PostgreSQL database management, optimization, and best practices","sidebar":"baseSidebar"},"postgres-howtos/miscellaneous/how-to-get-into-trouble-using-some-postgres-features":{"id":"postgres-howtos/miscellaneous/how-to-get-into-trouble-using-some-postgres-features","title":"How to get into trouble using some Postgres features","description":"","sidebar":"baseSidebar"},"postgres-howtos/miscellaneous/index":{"id":"postgres-howtos/miscellaneous/index","title":"Miscellaneous Postgres guides","description":"Various PostgreSQL tips, antipatterns, and general advice that don\'t fit into specific categories","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/index":{"id":"postgres-howtos/monitoring-troubleshooting/index","title":"Monitoring & troubleshooting","description":"Tools and techniques for monitoring PostgreSQL and solving common problems.","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/lock-analysis/how-to-understand-what-is-blocking-ddl":{"id":"postgres-howtos/monitoring-troubleshooting/lock-analysis/how-to-understand-what-is-blocking-ddl","title":"How to understand what\'s blocking DDL","description":"","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/lock-analysis/index":{"id":"postgres-howtos/monitoring-troubleshooting/lock-analysis/index","title":"Lock analysis","description":"Analyze and resolve locking issues and deadlocks","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/system-monitoring/flamegraphs-for-postgres":{"id":"postgres-howtos/monitoring-troubleshooting/system-monitoring/flamegraphs-for-postgres","title":"How to troubleshoot Postgres performance using FlameGraphs and eBPF (or perf)","description":"Today we\'ll discuss how to understand what exactly a Postgres backend is doing inside CPU on a Linux machine (in-CPU analysis).","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/system-monitoring/how-to-determine-the-replication-lag":{"id":"postgres-howtos/monitoring-troubleshooting/system-monitoring/how-to-determine-the-replication-lag","title":"How to determine the replication lag","description":"","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/system-monitoring/index":{"id":"postgres-howtos/monitoring-troubleshooting/system-monitoring/index","title":"System monitoring","description":"Monitor replication, WAL generation, and system health","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-flush-caches":{"id":"postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-flush-caches","title":"How to flush caches (OS page cache and Postgres buffer pool)","description":"","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-not-get-screwed-as-a-dba":{"id":"postgres-howtos/monitoring-troubleshooting/troubleshooting/how-to-not-get-screwed-as-a-dba","title":"How to NOT get screwed as a DBA (DBRE)","description":"","sidebar":"baseSidebar"},"postgres-howtos/monitoring-troubleshooting/troubleshooting/index":{"id":"postgres-howtos/monitoring-troubleshooting/troubleshooting/index","title":"Troubleshooting","description":"Troubleshoot common issues and performance problems","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/benchmarks/how-to-benchmark":{"id":"postgres-howtos/performance-optimization/benchmarks/how-to-benchmark","title":"How to benchmark","description":"Benchmarking is a huge topic. Here, we cover minimal steps that are required for a Postgres benchmark to be informative,","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/benchmarks/index":{"id":"postgres-howtos/performance-optimization/benchmarks/index","title":"Benchmarks","description":"Techniques and tools for benchmarking PostgreSQL performance","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/benchmarks/pre-and-post-steps-for-benchmark-iterations":{"id":"postgres-howtos/performance-optimization/benchmarks/pre-and-post-steps-for-benchmark-iterations","title":"Pre- and post-steps for benchmark iterations","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/index":{"id":"postgres-howtos/performance-optimization/index","title":"Performance & optimization","description":"Master PostgreSQL performance optimization with practical guides covering query tuning, indexing strategies, and system optimization.","sidebar":"baseSidebar"}
1,"postgres-howtos/performance-optimization/indexing/how-to-find-redundent-indexes":{"id":"postgres-howtos/performance-optimization/indexing/how-to-find-redundent-indexes","title":"How to find redundant indexes","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/indexing/how-to-find-unused-indexes":{"id":"postgres-howtos/performance-optimization/indexing/how-to-find-unused-indexes","title":"How to find unused indexes","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/indexing/how-to-monitor-index-operations":{"id":"postgres-howtos/performance-optimization/indexing/how-to-monitor-index-operations","title":"How to monitor CREATE INDEX / REINDEX progress in Postgres 12+","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/indexing/index":{"id":"postgres-howtos/performance-optimization/indexing/index","title":"Indexing","description":"Index creation, maintenance, monitoring, and optimization strategies","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/indexing/index-maintenance":{"id":"postgres-howtos/performance-optimization/indexing/index-maintenance","title":"Index maintenance","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/indexing/over-indexing":{"id":"postgres-howtos/performance-optimization/indexing/over-indexing","title":"Over-indexing","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/indexing/rebuild-indexes-without-deadlocks":{"id":"postgres-howtos/performance-optimization/indexing/rebuild-indexes-without-deadlocks","title":"How to rebuild many indexes using many backends avoiding deadlocks","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/monitoring/ad-hoc-monitoring":{"id":"postgres-howtos/performance-optimization/monitoring/ad-hoc-monitoring","title":"Ad-hoc monitoring","description":"// I post a new PostgreSQL \\"howto\\" article every day. Join me in this journey \u2013 subscribe, provide feedback, share!","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/monitoring/how-to-analyze-heavyweight-locks-part-1":{"id":"postgres-howtos/performance-optimization/monitoring/how-to-analyze-heavyweight-locks-part-1","title":"How to analyze heavyweight locks, part 1","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/monitoring/how-to-monitor-transaction-id-wraparound-risks":{"id":"postgres-howtos/performance-optimization/monitoring/how-to-monitor-transaction-id-wraparound-risks","title":"How to monitor transaction ID wraparound risks","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/monitoring/how-to-monitor-xmin-horizon":{"id":"postgres-howtos/performance-optimization/monitoring/how-to-monitor-xmin-horizon","title":"How to monitor xmin horizon to prevent XID/MultiXID wraparound and high bloat","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/monitoring/how-to-reduce-wal-generation-rates":{"id":"postgres-howtos/performance-optimization/monitoring/how-to-reduce-wal-generation-rates","title":"How to reduce WAL generation rates","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/monitoring/index":{"id":"postgres-howtos/performance-optimization/monitoring/index","title":"Monitoring","description":"Monitor database performance, analyze statistics, and track system metrics","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/monitoring/pg-stat-statements-part-1":{"id":"postgres-howtos/performance-optimization/monitoring/pg-stat-statements-part-1","title":"How to work with pg_stat_statements, part 1","description":"Two branches of query optimization","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/query-tuning/explain-analyze-buffers":{"id":"postgres-howtos/performance-optimization/query-tuning/explain-analyze-buffers","title":"EXPLAIN ANALYZE or EXPLAIN (ANALYZE, BUFFERS)?","description":"UPDATE 2025: Starting with Postgres 18, the `BUFFERS` option becomes default in `EXPLAIN ANALYZE`, which is great news.","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/query-tuning/from-pgss-to-explain--how-to-find-query-examples":{"id":"postgres-howtos/performance-optimization/query-tuning/from-pgss-to-explain--how-to-find-query-examples","title":"How to find query examples for problematic pg_stat_statements records","description":"// I post a new PostgreSQL \\"howto\\" article every day. Join me in this journey \u2013 subscribe, provide feedback, share!","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/query-tuning/how-to-decide-if-query-too-slow":{"id":"postgres-howtos/performance-optimization/query-tuning/how-to-decide-if-query-too-slow","title":"How to decide when a query is too slow and needs optimization","description":"\\"Slow\\" is a relative concept. In some cases, we might be happy with query latency 1 minute (or no?), while in other","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/query-tuning/how-to-imitate-production-planner":{"id":"postgres-howtos/performance-optimization/query-tuning/how-to-imitate-production-planner","title":"How to make the non-production Postgres planner behave like in production","description":"","sidebar":"baseSidebar"},"postgres-howtos/performance-optimization/query-tuning/index":{"id":"postgres-howtos/performance-optimization/query-tuning/index","title":"Query tuning","description":"Optimize query performance with EXPLAIN ANALYZE, execution plans, and performance tuning techniques","sidebar":"baseSidebar"},"postgres-howtos/schema-design/constraints/how-to-add-a-foreign-key":{"id":"postgres-howtos/schema-design/constraints/how-to-add-a-foreign-key","title":"How to add a foreign key","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/constraints/how-to-find-int4-pks-with-out-of-range-risks":{"id":"postgres-howtos/schema-design/constraints/how-to-find-int4-pks-with-out-of-range-risks","title":"How to find int4 PKs with out-of-range risks in a large database","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/constraints/how-to-remove-a-foreign-key":{"id":"postgres-howtos/schema-design/constraints/how-to-remove-a-foreign-key","title":"How to remove a foreign key","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/constraints/index":{"id":"postgres-howtos/schema-design/constraints/index","title":"Constraints","de
1scription":"Foreign keys, check constraints, and data integrity","sidebar":"baseSidebar"},"postgres-howtos/schema-design/data-types/how-to-quickly-check-data-type-and-storage-size-of-a-value":{"id":"postgres-howtos/schema-design/data-types/how-to-quickly-check-data-type-and-storage-size-of-a-value","title":"How to quickly check data type and storage size of a value","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/data-types/how-to-use-uuid":{"id":"postgres-howtos/schema-design/data-types/how-to-use-uuid","title":"How to use UUID","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/data-types/index":{"id":"postgres-howtos/schema-design/data-types/index","title":"Data types","description":"Choose and optimize data types for your use case","sidebar":"baseSidebar"},"postgres-howtos/schema-design/data-types/uuid-v7-and-partitioning-timescaledb":{"id":"postgres-howtos/schema-design/data-types/uuid-v7-and-partitioning-timescaledb","title":"UUID v7 and partitioning (TimescaleDB)","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/ddl-operations/how-to-add-a-check-constraint-without-downtime":{"id":"postgres-howtos/schema-design/ddl-operations/how-to-add-a-check-constraint-without-downtime","title":"How to add a CHECK constraint without downtime","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/ddl-operations/how-to-add-a-column":{"id":"postgres-howtos/schema-design/ddl-operations/how-to-add-a-column","title":"How to add a column","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/ddl-operations/how-to-drop-a-column":{"id":"postgres-howtos/schema-design/ddl-operations/how-to-drop-a-column","title":"How to drop a column","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/ddl-operations/how-to-redefine-a-PK-without-downtime":{"id":"postgres-howtos/schema-design/ddl-operations/how-to-redefine-a-PK-without-downtime","title":"How to redefine a PK without downtime","description":"","sidebar":"baseSidebar"},"postgres-howtos/schema-design/ddl-operations/index":{"id":"postgres-howtos/schema-design/ddl-operations/index","title":"DDL operations","description":"Safe schema changes, column management, and zero-downtime migrations","sidebar":"baseSidebar"},"postgres-howtos/schema-design/index":{"id":"postgres-howtos/schema-design/index","title":"Schema design","description":"Best practices for designing efficient PostgreSQL schemas and managing database objects.","sidebar":"baseSidebar"},"postgresai-howtos/how-to-install-mcp":{"id":"postgresai-howtos/how-to-install-mcp","title":"How to install MCP for AI coding tools","description":"Install MCP integration for Cursor, Claude Code, Windsurf, and Codex.","sidebar":"baseSidebar"},"postgresai-howtos/how-to-work-with-issues":{"id":"postgresai-howtos/how-to-work-with-issues","title":"How to work with Issues","description":"View, manage, and resolve issue reports in PostgresAI Console.","sidebar":"baseSidebar"},"postgresai-howtos/install-postgres-ai-monitoring-from-postgresai-console":{"id":"postgresai-howtos/install-postgres-ai-monitoring-from-postgresai-console","title":"Install PostgresAI monitoring","description":"How to install PostgresAI monitoring using the PostgresAI Console at console.postgres.ai.","sidebar":"baseSidebar"},"postgresai-howtos/joe-cli":{"id":"postgresai-howtos/joe-cli","title":"Run Joe from the CLI (pgai joe)","description":"Use pgai joe to get query plans, real EXPLAIN ANALYZE results, and test index ideas on ephemeral DBLab clones \u2014 right from your terminal.","sidebar":"baseSidebar"},"postgresai-howtos/postgresai-cli":{"id":"postgresai-howtos/postgresai-cli","title":"PostgresAI CLI","description":"Install and use postgresai CLI for authentication, MCP integration, and issues management.","sidebar":"baseSidebar"},"questions-and-answers":{"id":"questions-and-answers","title":"Questions & answers","description":"What is PostgresAI?","sidebar":"baseSidebar"},"reference-guides/database-lab-engine-api-reference":{"id":"reference-guides/database-lab-engine-api-reference","title":"DBLab API reference","description":"API reference for DBLab Engine \u2013 Swagger, OpenAPI","sidebar":"baseSidebar"},"reference-guides/database-lab-engine-components":{"id":"reference-guides/database-lab-engine-components","title":"DBLab Engine components","description":"Main container","sidebar":"baseSidebar"},"reference-guides/database-lab-engine-configuration-reference":{"id":"reference-guides/database-lab-engine-configuration-reference","title":"DBLab Engine configuration reference","description":"Overview","sidebar":"baseSidebar"},"reference-guides/db-migration-checker-configuration-reference":{"id":"reference-guides/db-migration-checker-configuration-reference","title":"DB Migration Checker configuration reference","description":"Overview","sidebar":"baseSidebar"},"reference-guides/dblab-client-cli-reference":{"id":"reference-guides/dblab-client-cli-reference","title":"Database Lab Client CLI reference (dblab)","description":"Description","sidebar":"baseSidebar"},"reference-guides/index":{"id":"reference-guides/index","title":"PostgresAI reference guides","description":"Monitoring","sidebar":"baseSidebar"},"reference-guides/joe-bot-commands-reference":{"id":"reference-guides/joe-bot-commands-reference","title":"Joe Bot c
1ommands reference","description":"help","sidebar":"baseSidebar"},"reference-guides/joe-bot-configuration-reference":{"id":"reference-guides/joe-bot-configuration-reference","title":"Joe Bot configuration reference","description":"There are two ways to define Joe Bot options:","sidebar":"baseSidebar"},"reference-guides/postgres-ai-bot-reference":{"id":"reference-guides/postgres-ai-bot-reference","title":"PostgresAI Assistant (beta) tools","description":"Overview","sidebar":"baseSidebar"},"reference-guides/postgres-ai-monitoring-reference":{"id":"reference-guides/postgres-ai-monitoring-reference","title":"postgres_ai monitoring reference documentation","description":"Metrics","sidebar":"baseSidebar"},"reference-guides/postgresai-cli-reference":{"id":"reference-guides/postgresai-cli-reference","title":"PostgresAI CLI reference","description":"Description","sidebar":"baseSidebar"},"roadmap":{"id":"roadmap","title":"Vision & roadmap","description":"PostgresAI\'s vision for Self-Driving Postgres and the roadmap to get there","sidebar":"baseSidebar"},"tutorials/database-lab-tutorial":{"id":"tutorials/database-lab-tutorial","title":"DBLab tutorial for any PostgreSQL database","description":"In this tutorial, we are going to set up a DBLab Engine in the Cloud. DBLab is used to boost software development and testing processes via enabling ultra-fast provisioning of databases of any size.","sidebar":"baseSidebar"},"tutorials/database-lab-tutorial-amazon-rds":{"id":"tutorials/database-lab-tutorial-amazon-rds","title":"Database Lab tutorial for Amazon RDS","description":"In this tutorial, we are going to set up a DBLab Engine for an existing PostgreSQL DB instance on Amazon RDS. Database Lab is used to boost software development and testing processes via enabling ultra-fast provisioning of databases of any size.","sidebar":"baseSidebar"},"tutorials/index":{"id":"tutorials/index","title":"Database Lab tutorials","description":"- Database Lab tutorial for any PostgreSQL database"},"tutorials/joe-setup":{"id":"tutorials/joe-setup","title":"Tutorial: Start using Joe Bot for PostgreSQL query optimization","description":"Learn how to use Joe bot to build a swift workflow of PostgreSQL query optimization running EXPLAIN commands on ultra-fast thin clones.","sidebar":"baseSidebar"}}}}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.