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

方法 1:通過(guò) PostgreSQL 日志實(shí)時(shí)查看
1. 修改 PostgreSQL 配置文件
在 docker-compose.yml 中掛載的 postgresql.conf 文件中,添加以下日志配置:
# 開(kāi)啟日志記錄所有 SQL 語(yǔ)句 log_statement = 'all' # 設(shè)置日志輸出格式(推薦包含時(shí)間、進(jìn)程 ID 等) log_line_prefix = '%t [%p]: [user=%u,db=%d] ' # 開(kāi)啟日志收集器 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. 實(shí)時(shí)查看日志
通過(guò) docker logs 或直接訪問(wèn)掛載的日志目錄實(shí)時(shí)查看:
# 方法 1:通過(guò) docker logs 實(shí)時(shí)查看 docker compose logs -f postgres # 方法 2:直接訪問(wèn)宿主機(jī)日志目錄(假設(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:通過(guò) pg_stat_activity 實(shí)時(shí)監(jiān)控
1. 查詢實(shí)時(shí)執(zhí)行的 SQL
定期執(zhí)行以下 SQL 語(yǔ)句(可通過(guò)腳本或 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 實(shí)時(shí)刷新
watch -n 1 "psql -U postgres -d postgres -c 'SELECT * FROM pg_stat_activity;'"
方法 3:使用 pg_stat_statements 擴(kuò)展
1. 啟用 pg_stat_statements
在 postgresql.conf 中添加:
shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all
重啟容器后執(zhí)行:
CREATE EXTENSION pg_stat_statements;
2. 查詢實(shí)時(shí) SQL 統(tǒng)計(jì)
SELECT
query,
calls,
total_exec_time,
mean_exec_time
FROM
pg_stat_statements
ORDER BY
total_exec_time DESC
LIMIT 10;
注意事項(xiàng)
- 日志性能開(kāi)銷(xiāo):
log_statement = 'all'會(huì)記錄所有 SQL,可能影響性能,建議僅用于調(diào)試。 - 日志輪轉(zhuǎn):通過(guò)
log_rotation_age和log_rotation_size控制日志文件大小。 - 權(quán)限問(wèn)題:確保掛載的日志目錄(如
./logs)有寫(xiě)入權(quán)限。 - 生產(chǎn)環(huán)境:建議僅記錄慢查詢(
log_min_duration_statement)而非所有語(yǔ)句。
總結(jié)
- 實(shí)時(shí)打印每條查詢:使用 方法 1(日志記錄)。
- 實(shí)時(shí)監(jiān)控活躍查詢:使用 方法 2(
pg_stat_activity)。 - 分析歷史查詢性能:使用 方法 3(
pg_stat_statements)。
到此這篇關(guān)于PostgreSQL打印實(shí)時(shí)查詢語(yǔ)句的三種方法的文章就介紹到這了,更多相關(guān)PostgreSQL打印查詢語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL圖(graph)的遞歸查詢實(shí)例
這篇文章主要給大家介紹了關(guān)于PostgreSQL圖(graph)的遞歸查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PostgreSQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
postgresql使用dblink跨庫(kù)增刪改查的步驟
這篇文章主要介紹了postgresql使用dblink跨庫(kù)增刪改查,本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
postgresql使用filter進(jìn)行多維度聚合的解決方法
這篇文章給大家介紹postgresql使用filter進(jìn)行多維度聚合的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07
postgresql 實(shí)現(xiàn)取出分組中最大的幾條數(shù)據(jù)
這篇文章主要介紹了postgresql 實(shí)現(xiàn)取出分組中最大的幾條數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
PostgreSQL13基于流復(fù)制搭建后備服務(wù)器的方法
這篇文章主要介紹了PostgreSQL13基于流復(fù)制搭建后備服務(wù)器,后備服務(wù)器作為主服務(wù)器的數(shù)據(jù)備份,可以保障數(shù)據(jù)不丟,而且在主服務(wù)器發(fā)生故障后可以提升為主服務(wù)器繼續(xù)提供服務(wù)。需要的朋友可以參考下2022-01-01
PostgreSQL 如何查找需要收集的vacuum 表信息
這篇文章主要介紹了PostgreSQL 如何查找需要收集的vacuum 表信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
PostgreSQL存儲(chǔ)過(guò)程用法實(shí)戰(zhàn)詳解
這篇文章主要介紹了PostgreSQL存儲(chǔ)過(guò)程用法,結(jié)合具體實(shí)例詳細(xì)分析了PostgreSQL數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的定義、使用方法及相關(guān)操作注意事項(xiàng),并附帶一個(gè)完整實(shí)例供大家參考,需要的朋友可以參考下2018-08-08
PostgreSQL流復(fù)制(主從復(fù)制)詳細(xì)教程
本文詳細(xì)介紹了PostgreSQL流復(fù)制技術(shù),流復(fù)制通過(guò)WAL日志實(shí)時(shí)同步主從庫(kù)數(shù)據(jù),支持異步和同步兩種模式,具有一定的參考價(jià)值,感興趣的可以了解一下2025-11-11

