概要
本文讲两种安装方式,重点详情讲homebrew的安装方式
环境
MacOS 12(Monterey )

Homebrew 5.0.4

homebrew方式安装
安装
bash
brew install postgresql@16
确认
安装成功后可以查看
bash
# 服务列表中多了个pg,但状态是error
brew services list
# 默认安装后因权限问题导致pg服务启动失败
或
bash
# 看程序组
brew list|grep postgres
日志(报不能用root启---不知所云,我当前非root用户)
bash
# pg日志
cat /opt/homebrew/var/log/postgresql@16.log
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise. See the documentation for
more information on how to properly start the server.
初始化新数据库
默认安装完没有初始化数据目录和数据库
bash
# 初始化新数据库
initdb /opt/homebrew/var/postgresql@16 -E utf8
# 将目录所有权赋予当前用户
sudo chown -R $(whoami) /opt/homebrew/var/postgresql@16
启动
bash
# 启动
pg_ctl -D /opt/homebrew/var/postgresql@16 start
说明:
这里不能指定log文档黑夜目录到默认目录启动,因为它会以root生身份创建日志文件(这与上面的服务启动报错对上了)
bash
# 不行
pg_ctl -D /opt/homebrew/var/postgresql@16 -l /opt/homebrew/var/log/postgresql@16.log start
验证当前用户连接
bash
psql # 直接连接,无需密码
创建同名数据库(若未自动创建)
bash
createdb # 创建与当前用户同名的数据库
手动设置密码(可选)
若需使用密码登录,需创建新用户:
bash
createuser --interactive # 创建新用户并设置密码
bash
CREATE USER postgres WITH PASSWORD 'postgres';
认证
- 优先使用
peer认证:无需密码,安全可靠。 - 查看配置文件 :
/opt/homebrew/var/postgresql@16/pg_hba.conf(Apple Silicon)或/usr/local/var/postgresql@16/pg_hba.conf(Intel),确认认证方式为peer。 - 日志排查 :
/opt/homebrew/var/postgresql@16/server.log查看详细错误信息。
总结 :Homebrew 安装的 PostgreSQL 默认无密码,通过
peer认证验证系统用户权限。若需密码登录,需手动创建用户并设置密码
离线二进制程序包安装
下载地址
https://get.enterprisedb.com/postgresql/postgresql-16.11-1-osx-binaries.zip
解压
略
启动
bash
# 解压后的bin目录中执行
pg_ctl -D /opt/postgresql@16 start
dmg程序包安装
下载地址
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
https://get.enterprisedb.com/postgresql/postgresql-16.11-1-osx.dmg
安装
略
常见误解
- 错误观念 :认为存在默认密码(如
postgres或空密码)。实际上,Homebrew 安装的 PostgreSQL 不设置任何默认密码。 - 权限问题:若遇到连接失败(如 "role does not exist"),需创建与系统用户同名的数据库或用户。
附件一:Postgresql入门
PostgreSQL 是一款功能强大的开源关系型数据库管理系统,适合初学者入门学习。以下是详细的入门指南,涵盖基本概念、安装、基础操作和常用命令,帮助你快速上手。
一、PostgreSQL 简介
-
核心特性
- 支持复杂查询、外键、触发器、视图、事务完整性等标准 SQL 功能。
- 提供丰富的数据类型(如 JSON、XML、数组、几何类型)。
- 支持存储过程和函数(多种语言,如 SQL、C、Python)。
- 高可用性(通过流复制、逻辑复制实现)。
- 跨平台(Windows、Linux、macOS 等)。
-
适用场景
- 需要复杂查询和事务处理的应用(如 ERP、CRM 系统)。
- 地理信息系统(GIS)数据存储。
- 大数据分析(通过扩展如 TimescaleDB)。
二、安装与配置
1. 安装方法
-
Windows :
下载官方安装包(PostgreSQL 官网),运行安装程序并设置超级用户密码(默认为
postgres)。 -
**Linux(Ubuntu/Debian)**:
bashsudo apt update sudo apt install postgresql postgresql-contrib安装后,PostgreSQL 自动运行,用户名为
postgres。 -
**macOS(通过 Homebrew)**:
bashbrew install postgresql brew services start postgresql
2. 初始配置
-
创建角色与数据库:
bashsudo -u postgres createuser --superuser your_username # 创建管理员用户 sudo -u postgres createdb your_database_name # 创建数据库 -
修改密码:
bashsudo -u postgres psql postgres=# \password your_username -
远程访问配置 :
编辑
pg_hba.conf(通常位于/etc/postgresql/<version>/main/),添加:bashhost all all 0.0.0.0/0 md5重启服务:
bashsudo systemctl restart postgresql
三、基础操作
1. 连接数据库
-
**命令行工具
psql**:bashpsql -U your_username -d your_database_name或使用默认用户:
bashsudo -u postgres psql -
图形化工具:
- pgAdmin:官方提供的管理界面,支持 Windows/Linux/macOS。
- DBeaver:跨平台数据库工具,支持多种数据库。
2. 基本 SQL 命令
-
创建表:
bashCREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -
插入数据:
bashINSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); -
查询数据:
bashSELECT * FROM users WHERE name LIKE 'A%'; -
更新数据:
bashUPDATE users SET email = 'alice.new@example.com' WHERE id = 1; -
删除数据:
bashDELETE FROM users WHERE id = 1; -
创建索引:
bashCREATE INDEX idx_users_email ON users(email);
3. 事务管理
-
事务控制 :
bashBEGIN; -- 多个 SQL 语句 COMMIT; -- 或 ROLLBACK;
四、高级功能
1. 存储过程与函数
-
创建函数:
bashCREATE OR REPLACE FUNCTION greet_user(p_name VARCHAR) RETURNS VARCHAR AS $$ BEGIN RETURN 'Hello, ' || p_name || '!'; END; $$ LANGUAGE plpgsql; -
调用函数:
bashSELECT greet_user('Bob');
2. 触发器
-
创建触发器 :
bashCREATE OR REPLACE FUNCTION log_user_changes() RETURNS TRIGGER AS $$ BEGIN INSERT INTO user_logs (user_id, action, timestamp) VALUES (OLD.id, 'update', NOW()); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER user_changes_trigger AFTER UPDATE ON users FOR EACH ROW EXECUTE FUNCTION log_user_changes();
3. 全文搜索
-
使用
tsvector和tsquery:bashCREATE TABLE articles ( id SERIAL PRIMARY KEY, title TEXT, content TEXT, search_vector tsvector ); CREATE OR REPLACE FUNCTION update_search_vector() RETURNS TRIGGER AS $$ BEGIN NEW.search_vector := setweight(to_tsvector('english', NEW.title), 'A') || setweight(to_tsvector('english', NEW.content), 'B'); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER update_search_vector BEFORE INSERT OR UPDATE ON articles FOR EACH ROW EXECUTE FUNCTION update_search_vector(); -- 查询 SELECT * FROM articles WHERE search_vector @@ to_tsquery('english', 'database');
五、性能优化
-
索引优化
- 为常用查询字段添加索引。
- 避免过度索引,影响写入性能。
-
查询优化
- 使用
EXPLAIN ANALYZE分析查询计划。 - 避免
SELECT *,只查询所需字段。
- 使用
-
配置调整
- 调整
shared_buffers(通常设为系统内存的 25%)。 - 优化
work_mem和maintenance_work_mem。
- 调整
六、学习资源
-
官方文档
-
书籍
- 《PostgreSQL 从入门到精通》 - 适合初学者。
- 《PostgreSQL 修炼之道》 - 深入讲解高级特性。
-
在线课程
- Udemy 的《PostgreSQL 入门到精通》。
- Coursera 的数据库课程(如加州大学欧文分校的《SQL for Data Science》)。
七、常见问题
-
权限不足
- 确保用户有
CREATE、INSERT等权限。 - 使用
GRANT命令授权。
- 确保用户有
-
连接失败
- 检查
pg_hba.conf配置。 - 确保防火墙未阻止端口(默认 5432)。
- 检查
-
性能问题
- 使用
EXPLAIN ANALYZE分析慢查询。 - 考虑分区表或物化视图。
- 使用
总结
PostgreSQL 是一款功能丰富且稳定的数据库,适合从入门到进阶的学习。通过掌握基础 SQL 命令、事务管理、存储过程等,你可以逐步提升数据库管理能力。建议结合官方文档和实际项目练习,加深理解。