PostgreSQL打印實時查詢語句的三種方法
最后通過后端flask sqlalchemy開啟SQLALCHEMY_ECHO每次數(shù)據(jù)庫訪問打印實現(xiàn)了:

方法 1:通過 PostgreSQL 日志實時查看
1. 修改 PostgreSQL 配置文件
在 docker-compose.yml 中掛載的 postgresql.conf 文件中,添加以下日志配置:
# 開啟日志記錄所有 SQL 語句 log_statement = 'all' # 設(shè)置日志輸出格式(推薦包含時間、進程 ID 等) log_line_prefix = '%t [%p]: [user=%u,db=%d] ' # 開啟日志收集器 logging_collector = on log_directory = '/var/log/postgresql' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
2. 重啟 PostgreSQL 容器
docker compose down docker compose up -d
3. 實時查看日志
通過 docker logs 或直接訪問掛載的日志目錄實時查看:
# 方法 1:通過 docker logs 實時查看 docker compose logs -f postgres # 方法 2:直接訪問宿主機日志目錄(假設(shè)日志掛載到 ./logs) tail -f ./logs/postgresql-*.log
日志示例
2025-09-07 16:24:38.123 UTC [1234]: [user=postgres,db=postgres] LOG: statement: SELECT * FROM my_table;
方法 2:通過 pg_stat_activity 實時監(jiān)控
1. 查詢實時執(zhí)行的 SQL
定期執(zhí)行以下 SQL 語句(可通過腳本或 watch 命令):
SELECT
pid,
usename,
query,
query_start,
now() - query_start AS duration
FROM
pg_stat_activity
WHERE
state = 'active'
AND query != '<IDLE>'
ORDER BY
query_start DESC;
2. 使用 watch 實時刷新
watch -n 1 "psql -U postgres -d postgres -c 'SELECT * FROM pg_stat_activity;'"
方法 3:使用 pg_stat_statements 擴展
1. 啟用 pg_stat_statements
在 postgresql.conf 中添加:
shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all
重啟容器后執(zhí)行:
CREATE EXTENSION pg_stat_statements;
2. 查詢實時 SQL 統(tǒng)計
SELECT
query,
calls,
total_exec_time,
mean_exec_time
FROM
pg_stat_statements
ORDER BY
total_exec_time DESC
LIMIT 10;
注意事項
- 日志性能開銷:
log_statement = 'all'會記錄所有 SQL,可能影響性能,建議僅用于調(diào)試。 - 日志輪轉(zhuǎn):通過
log_rotation_age和log_rotation_size控制日志文件大小。 - 權(quán)限問題:確保掛載的日志目錄(如
./logs)有寫入權(quán)限。 - 生產(chǎn)環(huán)境:建議僅記錄慢查詢(
log_min_duration_statement)而非所有語句。
總結(jié)
- 實時打印每條查詢:使用 方法 1(日志記錄)。
- 實時監(jiān)控活躍查詢:使用 方法 2(
pg_stat_activity)。 - 分析歷史查詢性能:使用 方法 3(
pg_stat_statements)。
到此這篇關(guān)于PostgreSQL打印實時查詢語句的三種方法的文章就介紹到這了,更多相關(guān)PostgreSQL打印查詢語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL教程(五):函數(shù)和操作符詳解(1)
這篇文章主要介紹了PostgreSQL教程(五):函數(shù)和操作符詳解(1),本文講解了邏輯操作符、比較操作符、數(shù)學(xué)函數(shù)和操作符、三角函數(shù)列表、字符串函數(shù)和操作符等內(nèi)容,需要的朋友可以參考下2015-05-05
PostgreSQL 用戶名大小寫規(guī)則小結(jié)
PostgreSQL默認(rèn)不區(qū)分用戶名大小寫,創(chuàng)建和連接時自動轉(zhuǎn)為小寫,使用雙引號可強制區(qū)分,下面就來介紹一下PostgreSQL 用戶名大小寫規(guī)則,感興趣的可以了解一下2025-06-06
postgreSQL查詢結(jié)果添加一個額外的自增序列操作
這篇文章主要介紹了postgreSQL查詢結(jié)果添加一個額外的自增序列操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
PostgreSQL數(shù)據(jù)庫如何定期清理歸檔(pg_wal)日志
在?般的?產(chǎn)環(huán)境中,數(shù)據(jù)庫都需要開啟歸檔模式,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL數(shù)據(jù)庫如何定期清理歸檔(pg_wal)日志的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
Postgresql的select優(yōu)化操作(快了200倍)
這篇文章主要介紹了Postgresql的select優(yōu)化操作(快了200倍),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
postgreSQL中的row_number() 與distinct用法說明
這篇文章主要介紹了postgreSQL中的row_number() 與distinct用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

