MacOS 12(Monterey )PG安装通关指导

概要

本文讲两种安装方式,重点详情讲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 简介

  1. 核心特性

    • 支持复杂查询、外键、触发器、视图、事务完整性等标准 SQL 功能。
    • 提供丰富的数据类型(如 JSON、XML、数组、几何类型)。
    • 支持存储过程和函数(多种语言,如 SQL、C、Python)。
    • 高可用性(通过流复制、逻辑复制实现)。
    • 跨平台(Windows、Linux、macOS 等)。
  2. 适用场景

    • 需要复杂查询和事务处理的应用(如 ERP、CRM 系统)。
    • 地理信息系统(GIS)数据存储。
    • 大数据分析(通过扩展如 TimescaleDB)。

二、安装与配置

1. 安装方法
  • Windows ‌:

    下载官方安装包(PostgreSQL 官网),运行安装程序并设置超级用户密码(默认为 postgres)。

  • ‌**Linux(Ubuntu/Debian)**‌:

    bash 复制代码
    sudo apt update sudo apt install postgresql postgresql-contrib

    安装后,PostgreSQL 自动运行,用户名为 postgres

  • ‌**macOS(通过 Homebrew)**‌:

    bash 复制代码
    brew install postgresql brew services start postgresql
2. 初始配置
  • 创建角色与数据库‌:

    bash 复制代码
    sudo -u postgres createuser --superuser your_username # 创建管理员用户
    sudo -u postgres createdb your_database_name # 创建数据库
  • 修改密码‌:

    bash 复制代码
    sudo -u postgres psql postgres=# \password your_username
  • 远程访问配置 ‌:

    编辑 pg_hba.conf(通常位于 /etc/postgresql/<version>/main/),添加:

    bash 复制代码
    host all all 0.0.0.0/0 md5

    重启服务:

    bash 复制代码
    sudo systemctl restart postgresql

三、基础操作

1. 连接数据库
  • ‌**命令行工具 psql**‌:

    bash 复制代码
    psql -U your_username -d your_database_name

    或使用默认用户:

    bash 复制代码
    sudo -u postgres psql
  • 图形化工具‌:

    • pgAdmin‌:官方提供的管理界面,支持 Windows/Linux/macOS。
    • DBeaver‌:跨平台数据库工具,支持多种数据库。
2. 基本 SQL 命令
  • 创建表‌:

    bash 复制代码
    CREATE TABLE users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        email VARCHAR(100) UNIQUE,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
  • 插入数据‌:

    bash 复制代码
    INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
  • 查询数据‌:

    bash 复制代码
    SELECT * FROM users WHERE name LIKE 'A%';
  • 更新数据‌:

    bash 复制代码
    UPDATE users SET email = 'alice.new@example.com' WHERE id = 1;
  • 删除数据‌:

    bash 复制代码
    DELETE FROM users WHERE id = 1;
  • 创建索引‌:

    bash 复制代码
    CREATE INDEX idx_users_email ON users(email);
3. 事务管理
  • 事务控制 ‌:

    bash 复制代码
    BEGIN;
    -- 多个 SQL 语句
    COMMIT;  -- 或 ROLLBACK;

四、高级功能

1. 存储过程与函数
  • 创建函数‌:

    bash 复制代码
    CREATE OR REPLACE FUNCTION greet_user(p_name VARCHAR) RETURNS VARCHAR AS $$
    BEGIN
        RETURN 'Hello, ' || p_name || '!';
    END;
    $$ LANGUAGE plpgsql;
  • 调用函数‌:

    bash 复制代码
    SELECT greet_user('Bob');
2. 触发器
  • 创建触发器 ‌:

    bash 复制代码
    CREATE 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. 全文搜索
  • 使用 tsvectortsquery ‌:

    bash 复制代码
    CREATE 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');

五、性能优化

  1. 索引优化

    • 为常用查询字段添加索引。
    • 避免过度索引,影响写入性能。
  2. 查询优化

    • 使用 EXPLAIN ANALYZE 分析查询计划。
    • 避免 SELECT *,只查询所需字段。
  3. 配置调整

    • 调整 shared_buffers(通常设为系统内存的 25%)。
    • 优化 work_memmaintenance_work_mem

六、学习资源

  1. 官方文档

  2. 书籍

    • 《PostgreSQL 从入门到精通》 - 适合初学者。
    • 《PostgreSQL 修炼之道》 - 深入讲解高级特性。
  3. 在线课程

    • Udemy 的《PostgreSQL 入门到精通》。
    • Coursera 的数据库课程(如加州大学欧文分校的《SQL for Data Science》)。

七、常见问题

  1. 权限不足

    • 确保用户有 CREATEINSERT 等权限。
    • 使用 GRANT 命令授权。
  2. 连接失败

    • 检查 pg_hba.conf 配置。
    • 确保防火墙未阻止端口(默认 5432)。
  3. 性能问题

    • 使用 EXPLAIN ANALYZE 分析慢查询。
    • 考虑分区表或物化视图。

总结

PostgreSQL 是一款功能丰富且稳定的数据库,适合从入门到进阶的学习。通过掌握基础 SQL 命令、事务管理、存储过程等,你可以逐步提升数据库管理能力。建议结合官方文档和实际项目练习,加深理解。

相关推荐
喵霓1 小时前
mac系统的环境变量-bash_profile
开发语言·macos·bash
Bruce_Liuxiaowei2 小时前
[特殊字符] Mac 高效排查:使用 lsof 查找和管理端口占用进程
网络·macos
2501_915909062 小时前
如何防止 IPA 被反编译,从攻防视角构建一套真正有效的 iOS 成品保护体系
android·macos·ios·小程序·uni-app·cocoa·iphone
khatung2 小时前
借助Electron打通平台与用户通知(macOS系统)
前端·javascript·vscode·react.js·macos·electron·前端框架
Sheffi663 小时前
ARC 的自动释放机制与 autoreleasepool 深度解析
macos·objective-c·cocoa
海绵宝宝_17 小时前
良心产品- Mac 上最强卸载清理工具(开源) Mole 小鼹鼠
macos
喵霓18 小时前
ipython笔记
macos
程序员霸哥哥20 小时前
XYplorer(多标签文件管理器) v27.20.0700 / 28.00.1200 多语便携版
windows·macos·软件工程·mac·应用软件·xyplorer
他们都不看好你,偏偏你最不争气1 天前
【iOS】SDWebImage解析
macos·ios·objective-c·cocoa·sdwebimage