PostgreSQL云服務(wù)器安裝配置指南
MySQL 是 PHP 項(xiàng)目的默認(rèn)選擇,但越來越多的框架(Django、Ruby on Rails、Laravel 等)在認(rèn)真的項(xiàng)目上推薦用 PostgreSQL——對(duì) JSON、全文搜索、窗口函數(shù)、復(fù)雜查詢的支持更完善,加上嚴(yán)格的數(shù)據(jù)類型和約束執(zhí)行,寫起代碼來更放心。這篇文章從安裝開始,覆蓋生產(chǎn)環(huán)境需要的基本配置和安全加固。
服務(wù)器配置建議
PostgreSQL 的內(nèi)存需求取決于連接數(shù)和數(shù)據(jù)量:
| 場(chǎng)景 | CPU | 內(nèi)存 | 硬盤 |
|---|---|---|---|
| 個(gè)人項(xiàng)目 / 小型應(yīng)用 | 1 核 | 1G | 20GB |
| 中型業(yè)務(wù)應(yīng)用 | 2–4 核 | 4–8G | 100GB |
| 大數(shù)據(jù)量 / 高并發(fā) | 8 核+ | 16G+ | SSD 500GB+ |
我在雨云的服務(wù)器上跑 PostgreSQL,2 核 4G 的配置跑幾個(gè)中小型應(yīng)用完全沒問題。新用戶注冊(cè)填優(yōu)惠碼 2026off 能領(lǐng) 5 折優(yōu)惠券。
安裝 PostgreSQL
# 添加官方源(獲取最新版本,Ubuntu 22.04 自帶的版本較舊) sudo apt install -y curl ca-certificates sudo install -d /usr/share/postgresql-common/pgdg curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail \ https://www.postgresql.org/media/keys/ACCC4CF8.asc sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \ https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > \ /etc/apt/sources.list.d/pgdg.list' sudo apt update sudo apt install -y postgresql-16 # 安裝 PostgreSQL 16 # 檢查狀態(tài) sudo systemctl status postgresql
基本配置
安裝完成后用 postgres 系統(tǒng)用戶登錄:
sudo -u postgres psql
創(chuàng)建數(shù)據(jù)庫用戶和數(shù)據(jù)庫
-- 創(chuàng)建應(yīng)用用戶(不要直接用 postgres 超級(jí)用戶) CREATE USER myapp WITH PASSWORD '強(qiáng)密碼在這里'; -- 創(chuàng)建數(shù)據(jù)庫 CREATE DATABASE myapp_db OWNER myapp; -- 如果需要超級(jí)用戶權(quán)限(不推薦) -- CREATE USER admin WITH SUPERUSER PASSWORD '密碼'; -- 退出 \q
創(chuàng)建只讀用戶(適合查詢分析)
CREATE USER readonly WITH PASSWORD '只讀用戶密碼'; GRANT CONNECT ON DATABASE myapp_db TO readonly; GRANT USAGE ON SCHEMA public TO readonly; GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
配置文件調(diào)整
主配置文件在 /etc/postgresql/16/main/postgresql.conf:
sudo nano /etc/postgresql/16/main/postgresql.conf
重要參數(shù)調(diào)整:
# 連接設(shè)置 listen_addresses = 'localhost' # 只監(jiān)聽本地(如需遠(yuǎn)程訪問改為 '*') max_connections = 100 # 最大連接數(shù)(根據(jù)內(nèi)存調(diào)整) # 內(nèi)存設(shè)置(根據(jù)服務(wù)器內(nèi)存調(diào)整) shared_buffers = 256MB # 建議內(nèi)存的 25% effective_cache_size = 768MB # 建議內(nèi)存的 75% work_mem = 4MB # 每個(gè)排序操作的內(nèi)存 maintenance_work_mem = 64MB # VACUUM、CREATE INDEX 的內(nèi)存 # 日志 log_destination = 'stderr' logging_collector = on log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d.log' log_min_duration_statement = 1000 # 記錄超過 1 秒的慢查詢 # 檢查點(diǎn) checkpoint_completion_target = 0.9 wal_buffers = 16MB
遠(yuǎn)程訪問配置
如果應(yīng)用程序在另一臺(tái)服務(wù)器上,需要開啟遠(yuǎn)程訪問:
# 修改 listen_addresses sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" \ /etc/postgresql/16/main/postgresql.conf
配置訪問控制(pg_hba.conf):
sudo nano /etc/postgresql/16/main/pg_hba.conf
在文件末尾添加(只允許特定 IP 訪問特定數(shù)據(jù)庫):
# 格式:類型 數(shù)據(jù)庫 用戶 地址 認(rèn)證方式 host myapp_db myapp 應(yīng)用服務(wù)器IP/32 scram-sha-256
重啟 PostgreSQL:
sudo systemctl restart postgresql
在云控制臺(tái)安全組放行 TCP 5432(只允許應(yīng)用服務(wù)器 IP,不要對(duì)公網(wǎng)全開)。
連接測(cè)試
# 從應(yīng)用服務(wù)器測(cè)試連接
psql -h 數(shù)據(jù)庫服務(wù)器IP -U myapp -d myapp_db
# 或者用 Python
python3 -c "import psycopg2; conn = psycopg2.connect('host=數(shù)據(jù)庫IP dbname=myapp_db user=myapp password=密碼'); print('連接成功')"常用管理命令
-- 列出所有數(shù)據(jù)庫
\l
-- 切換數(shù)據(jù)庫
\c myapp_db
-- 列出所有表
\dt
-- 查看表結(jié)構(gòu)
\d 表名
-- 查看當(dāng)前連接
SELECT * FROM pg_stat_activity;
-- 查看表大小
SELECT pg_size_pretty(pg_total_relation_size('表名'));
-- 查看數(shù)據(jù)庫大小
SELECT pg_size_pretty(pg_database_size('myapp_db'));備份與恢復(fù)
# 備份單個(gè)數(shù)據(jù)庫(推薦格式:custom,支持并行恢復(fù)) pg_dump -U postgres -Fc myapp_db > /backup/myapp-$(date +%Y%m%d).dump # 備份所有數(shù)據(jù)庫 pg_dumpall -U postgres | gzip > /backup/all-$(date +%Y%m%d).sql.gz # 恢復(fù) pg_restore -U postgres -d myapp_db /backup/myapp-20260427.dump # 自動(dòng)備份(加入 cron) echo "0 2 * * * pg_dump -U postgres -Fc myapp_db | gzip > /backup/myapp-\$(date +\%Y\%m\%d).dump.gz" | sudo -u postgres crontab -
監(jiān)控慢查詢
-- 查看正在執(zhí)行的慢查詢
SELECT pid, now() - pg_stat_activity.query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active'
AND now() - pg_stat_activity.query_start > interval '5 seconds'
ORDER BY duration DESC;
-- 找出需要添加索引的表
SELECT schemaname, tablename, seq_scan, idx_scan,
n_live_tup, n_dead_tup
FROM pg_stat_user_tables
ORDER BY seq_scan DESC
LIMIT 10;
定期維護(hù)
# 手動(dòng)執(zhí)行 VACUUM(清理死元組,更新統(tǒng)計(jì)信息) sudo -u postgres vacuumdb --all --analyze # PostgreSQL 有 autovacuum 自動(dòng)維護(hù),通常不需要手動(dòng)執(zhí)行 # 查看 autovacuum 狀態(tài) sudo -u postgres psql -c "SELECT * FROM pg_stat_bgwriter;"
PostgreSQL 配置好之后,最值得花時(shí)間的是連接池(推薦 PgBouncer)和索引優(yōu)化——連接數(shù)過多和缺少索引是絕大多數(shù)性能問題的根源。監(jiān)控慢查詢?nèi)罩臼钦页鰞?yōu)化點(diǎn)最直接的方式。
以上就是PostgreSQL云服務(wù)器安裝配置指南的詳細(xì)內(nèi)容,更多關(guān)于PostgreSQL云服務(wù)器安裝配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Postgresql源碼分析returns?setof函數(shù)oracle管道pipelined
這篇文章主要為大家介紹了Postgresql源碼分析returns?setof函數(shù)oracle管道pipelined,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
PostgreSQL分區(qū)表的實(shí)現(xiàn)示例
分區(qū)表是一種數(shù)據(jù)庫優(yōu)化技術(shù),本文主要介紹了PostgreSQL分區(qū)表的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
PostgreSQL設(shè)置時(shí)區(qū)、時(shí)間/日期函數(shù)匯總大全
PostgreSQL是一款簡(jiǎn)介而又性能強(qiáng)大的數(shù)據(jù)庫應(yīng)用程序,其在日期時(shí)間數(shù)據(jù)方面所支持的功能也都非常給力,這篇文章主要給大家介紹了關(guān)于PostgreSQL設(shè)置時(shí)區(qū)、時(shí)間/日期函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-09-09
PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法
這篇文章主要給大家介紹了關(guān)于PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法, 在PostgreSQL中創(chuàng)建一個(gè)新用戶非常簡(jiǎn)單,但可能會(huì)遇到權(quán)限問題,需要的朋友可以參考下2023-09-09
postgreSql分組統(tǒng)計(jì)數(shù)據(jù)的實(shí)現(xiàn)代碼
這篇文章給大家介紹postgreSql的監(jiān)控記錄表里多條不同時(shí)間的數(shù)據(jù),只取最新的數(shù)據(jù),并分組統(tǒng)計(jì),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-12-12
PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法
這篇文章主要介紹了PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法,需要的朋友可以參考下2017-05-05
PgSQl臨時(shí)表創(chuàng)建及應(yīng)用實(shí)例解析
這篇文章主要介紹了PgSQl臨時(shí)表創(chuàng)建及應(yīng)用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
PostgreSQL 刪除check約束的實(shí)現(xiàn)
這篇文章主要介紹了PostgreSQL 刪除check約束的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02

