PostgreSQL初体验

目录

PostgreSQL简介

‌一、基础定义与历史演进‌

二、特点

三、优势

四、系统架构

 源码安装全流程

‌一、环境准备‌

‌二、源码编译部署‌

‌三、数据库初始化‌

‌四、服务管理‌

‌五、环境验证‌

‌六、进阶配置建议‌

PostpreSQL组成结构

一、逻辑结构

二、物理结构


PostgreSQL简介

一、基础定义与历史演进

PostgreSQL 是一款‌对象-关系型数据库管理系统‌(ORDBMS),源自加州大学伯克利分校的POSTGRES项目(1986年)。其发展历程可分为三个阶段:

  1. Ingres时期‌(1970年代):奠定关系型数据库研究基础
  2. Postgres时期‌(1980-1996年):引入对象关系模型与复杂数据类型
  3. PostgreSQL时期‌(1996年至今):开源化并逐步集成现代数据库技术(如MVCC、GIS支持)

二、特点

  • 开源与自由:
  1. BSD许可:允许用户自由使用、修改和分发代码,无商业使用限制

  2. 社区驱动:全球900+贡献者组成的开源生态,年更新1个主版本

  3. 企业级免费:OLAP/OLTP混合负载能力媲美商业数据库(如Oracle)

  • 标准符合性:高度符合SQL标准,支持复杂的查询语法、子查询、窗口函数、公共表表达式(CTE)等高级特性,使得开发者可以更加灵活地编写高效、易读地SQL代码;
  • 数据类型丰富:类别典型类型特色案例基础类型NUMERIC(1000,500)精确计算金融数据几何类型CIRCLE, PATH地理信息系统存储文档类型JSONB(带索引)毫秒级检索10GB JSON数据自定义类型CREATE TYPE RGB AS (r,g,b)图像处理专用数据类型;
  • 事务与并发:其采用多版本并发控制(MVCC)机制,确保了在高并发环境下的数据一致性和隔离性。同时还支持复杂的事务处理,包括嵌套事务、保存点等,为开发者提供了强大的事务管理能力;
  • 扩展性:
  1. 可插拔设计:通过EXTENSION机制加载PostGIS(空间数据库)、TimescaleDB(时序数据库)等扩展

  2. 多语言支持:支持PL/pgSQL(原生)、PL/Python、PL/R等11种过程语言

  3. 并行查询:8.0版本起支持最多128个worker并行执行

  • 安全性:
  1. WAL日志:支持同步/异步复制,故障恢复精确到秒级

  2. PITR:允许回滚到任意时间点(最小精度1秒)

  3. Tablespace:支持SSD/HDD混合存储策略

三、优势

一、开源与生态优势

  • BSD许可证自由‌:允许商业闭源使用且无专利风险,相比GPL许可的MySQL更受企业青睐
  • 全球开发者社区‌:900+贡献者持续迭代,年均发布1个主版本(如2025年将发布PostgreSQL 16)5
  • 云厂商全支持‌:AWS/Azure/阿里云均提供托管服务,兼容性优于其他开源数据库

‌二、功能完备性

维度技术实现对比优势
数据模型支持关系型+JSONB+时序+空间数据,单库实现多范式融合Oracle需多产品组合实现
SQL兼容实现SQL2016标准160项,支持递归查询、窗口函数等复杂分析MySQL仅兼容92项
事务性能MVCC+SSI隔离级别,读写并发量可达10万QPS(SSD环境)避免Oracle的高授权成本

‌三、扩展能力图谱

  1. 垂直扩展

    • 自定义数据类型(如RGB色彩模型)
    • 支持11种编程语言编写存储过程(PL/Python等)
  2. 水平扩展

    • Citus扩展实现分布式表(Sharding)
    • 逻辑解码支持实时数据同步到Kafka
  3. 领域扩展

    • PostGIS:GIS处理性能超Oracle Spatial 30%
    • TimescaleDB:时序数据压缩比达20:15

‌四、企业级可靠性

  • 数据安全‌:WAL日志+PITR实现秒级RPO(参考华瑞指数云快照技术)
  • 高可用‌:同步复制+自动故障转移,可用性达99.999%
  • 混合负载‌:OLTP与OLAP性能均衡,TPC-H测试超MySQL 2.3倍

四、系统架构

前端应用
  ↓
查询解析器 → 重写系统 → 优化器
                      ↓
执行器 ← 存储系统(堆文件/索引)
  ↑
事务系统(MVCC)
  ↑
共享缓存 & 后台进程(autovacuum/WAL writer等)

 源码安装全流程


一、环境准备
  1. 系统依赖安装
    • Debian/Ubuntu‌:
      sudo apt update && sudo apt install -y build-essential libreadline-dev zlib1g-dev flex bison \ 
      libxml2-dev libxslt-dev libssl-dev libsystemd-dev python3-dev cmake ```:ml-citation{ref="1,6" data="citationList"} 
    • CentOS/RHEL‌:
      sudo yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel \ 
      libxml2-devel libxslt-devel openldap-devel gcc-c++ openssl-devel cmake ```:ml-citation{ref="2,6" data="citationList"} 
  2. 创建专用用户
    sudo groupadd postgres 
    sudo useradd -g postgres postgres 
    sudo passwd postgres # 设置用户密码 
    ```:ml-citation{ref="6,8" data="citationList"} 

二、源码编译部署
  1. 下载与解压

    wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz 
    tar -zxvf postgresql-16.2.tar.gz 
    cd postgresql-16.2 
    ```:ml-citation{ref="1,3" data="citationList"} 
  2. 编译配置

    ./configure --prefix=/opt/postgresql/16 \ 
    --enable-debug \ 
    --with-perl \ 
    --with-python \ 
    --with-openssl 
    • --enable-debug:开启调试模式(开发环境建议启用)
    • --prefix:指定安装路径,避免污染系统目录
  3. 编译与安装

    make -j$(nproc) # 多核并行编译 && make install # 系统级安装 
    若出现copy_fetch.c编译错误,需修改源码中copy_file_rangecopy_file_chunk

三、数据库初始化
  1. 创建数据目录
    sudo mkdir -p /data/postgresql/16 
    sudo chown -R postgres:postgres /data/postgresql 
    ```:ml-citation{ref="6,8" data="citationList"} 
  2. 初始化数据库集群
    sudo su - postgres 
    /opt/postgresql/16/bin/initdb -D /data/postgresql/16 \ 
    --locale=en_US.UTF-8 \ 
    --encoding=UTF8 
    ```:ml-citation{ref="3,8" data="citationList"} 
  3. 修改配置文件
    • pg_hba.conf‌(访问控制):
      host   all    all 0.0.0.0/0 
      md5 ```:ml-citation{ref="4,8" data="citationList"} 
    • postgresql.conf‌(核心配置):
      listen_addresses = '*' # 允许远程访问 
      max_connections = 500 # 最大连接数 
      shared_buffers = 4GB # 共享内存设置 
      ```:ml-citation{ref="3,6" data="citationList"} 

四、服务管理
  1. 启停服务
    # 启动 
    /opt/postgresql/16/bin/pg_ctl -D /data/postgresql/16 start 
    
    # 停止 
    /opt/postgresql/16/bin/pg_ctl -D /data/postgresql/16 stop 
    ```:ml-citation{ref="3,7" data="citationList"} 
  2. 设置系统服务(可选)
    sudo ln -s /opt/postgresql/16/bin/* /usr/local/bin/ 
    cp contrib/start-scripts/linux /etc/init.d/postgresql 
    chkconfig --add postgresql 
    ```:ml-citation{ref="6,7" data="citationList"} 

五、环境验证
  1. 连接测试

    psql -h 127.0.0.1 -U postgres -d postgres 

    执行SELECT version();验证版本信息

  2. 性能基准测试

    CREATE TABLE test_table (id SERIAL PRIMARY KEY, data TEXT); 
    INSERT INTO test_table (data) SELECT md5(random()::text) FROM generate_series(1,100000); 
    ```:ml-citation{ref="8" data="citationList"} 

六、进阶配置建议
  1. 内核参数优化
    # /etc/sysctl.conf 
    kernel.shmmax=68719476736 
    kernel.shmall=4294967296 
    fs.file-max=655360 
    ```:ml-citation{ref="8" data="citationList"} 
  2. 日志管理
    # postgresql.conf 
    logging_collector = on 
    log_directory = 'pg_log' 
    log_filename = 'postgresql-%Y-%m-%d.log' 
    ```:ml-citation{ref="3,6" data="citationList"} 

PostpreSQL组成结构

一、逻辑结构

PostgreSQL采用三级逻辑层次组织数据:

数据库集群(Database Cluster):由单个实例管理的数据库集合,包含多个数据库、用户及所有对象,共享全局配置和内存结构

数据库(Database):相互隔离的逻辑单元,包含:

  • 默认创建的template0(不可修改模板)、template1(可定制模板)、postgres(默认数据库)
  • 表空间(tablespace):逻辑存储单元,初始化时自动创建pg_global(系统表空间)和pg_default(默认表空间)

数据库对象:

  • 表/索引(Relation):通过oid(无符号4字节整数)标识,系统表如pg_class存储表描述信息
  • Schema命名空间:包含public、pg_catalog等,通过search_path参数控制查找顺序

二、物理结构

目录结构:

安装目录(PGHOME):含bin(可执行文件)、lib(动态库)、share(文档模板)

数据目录(PGDATA)核心子目录:

  • base/    - 默认表空间数据文件
  • global/  - 共享系统表
  • pg_wal/  - WAL日志
  • pg_tblspc/ - 用户表空间软链接

进程架构:

Postmaster主进程管理实例启停

客户端连接时派生独立后端进程处理请求

内存结构:

共享内存:含shared_buffers(数据缓存,推荐1/4物理内存)、wal_buffers(日志缓存)

私有内存:包括temp_buffers(临时表处理)、work_mem(排序/哈希操作)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值