在使用擴展插件前,需確保系統已安裝PostgreSQL數據庫。若未安裝,可通過以下命令完成安裝:
sudo apt update
sudo apt install postgresql postgresql-contrib
安裝完成后,啟動PostgreSQL服務并設置為開機自啟:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Debian的APT倉庫提供了多數常用擴展(如pg_stat_monitor、pg_trgm、timescaledb),安裝步驟如下:
sudo apt update<version>(如13),例如:# 安裝pg_stat_monitor(性能監控)
sudo apt install postgresql-13-pgstatmonitor
# 安裝pg_trgm(全文搜索相似度匹配)
sudo apt install postgresql-13-pgtrgm
# 安裝timescaledb(時間序列數據)
sudo apt install timescaledb
sudo systemctl restart postgresql
若擴展不在APT倉庫中(如第三方擴展),需手動編譯安裝:
tar -zxvf extension-name-version.tar.gz
cd extension-name-version
sudo mkdir -p /var/lib/postgresql/<version>/main/extension-name
sudo chown postgres:postgres /var/lib/postgresql/<version>/main/extension-name
./configure
make
sudo make install
postgresql.conf添加擴展配置(如shared_preload_libraries),重啟服務后創建擴展:CREATE EXTENSION extension_name;
安裝完成后,需在目標數據庫中啟用擴展。以pg_stat_monitor為例:
postgres用戶登錄(默認無密碼):sudo -u postgres psql
psql提示符下執行:CREATE EXTENSION pg_stat_monitor;
IF NOT EXISTS:CREATE EXTENSION IF NOT EXISTS pg_stat_monitor;
timescaledb)需添加CASCADE選項以自動處理依賴:CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
通過以下SQL命令查看當前數據庫中已安裝的擴展:
SELECT * FROM pg_extension;
或使用psql的\dx快捷命令(更直觀):
\dx
部分擴展需要額外配置才能發揮功能:
pg_stat_monitor:修改postgresql.conf,添加以下配置并重啟服務:
sudo nano /etc/postgresql/<version>/main/postgresql.conf
找到并修改:
shared_preload_libraries = 'pg_stat_monitor'
pg_stat_monitor.track = all
保存后重啟:
sudo systemctl reload postgresql
pg_stat_statements:用于查詢性能統計,需先在postgresql.conf中啟用:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all
重啟后創建擴展:
CREATE EXTENSION pg_stat_statements;
-- 查看最耗時的查詢
SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;
-- 創建測試表
CREATE TABLE test (id serial, content text);
INSERT INTO test (content) VALUES ('hello world'), ('hello postgres');
-- 計算相似度(返回0-1之間的值,越接近1越相似)
SELECT content, similarity(content, 'hello') AS sim
FROM test
ORDER BY sim DESC;
-- 創建超表(自動分區)
CREATE TABLE sensor_data (
time TIMESTAMPTZ NOT NULL,
device_id INTEGER NOT NULL,
temperature DOUBLE PRECISION
) WITH (timescaledb.super = true);
-- 插入數據
INSERT INTO sensor_data (time, device_id, temperature)
VALUES (NOW(), 1, 25.5), (NOW() - INTERVAL '1 hour', 1, 26.0);
-- 查詢最近1小時的平均溫度
SELECT time_bucket('1 hour', time) AS hour,
AVG(temperature) AS avg_temp
FROM sensor_data
WHERE time > NOW() - INTERVAL '1 hour'
GROUP BY hour;
若不再需要某擴展,可使用以下命令刪除(謹慎操作,可能影響依賴該擴展的對象):
DROP EXTENSION IF EXISTS extension_name CASCADE;
例如,刪除pg_stat_monitor:
DROP EXTENSION IF EXISTS pg_stat_monitor CASCADE;
pg_stat_monitor需匹配PostgreSQL主版本)。postgres用戶)或相應權限。postgresql.conf后需重啟或重載服務(sudo systemctl reload postgresql)。cp postgresql.conf postgresql.conf.bak)。