关于postgersql相关技术栈的总结

我们类比mysql

1.架构部署层面

2.创建库,选择引擎

3.sql语法层面

3.1创建表阶段

数据类型的不同

3.2创建索引,主键

3.3 crud阶段的语法不同

🏛️ 1. 架构部署层面

对比项 MySQL PostgreSQL SQLite MariaDB
架构模式 客户端-服务器 (C/S) 服务器监听端口接收客户端请求。 客户端-服务器 (C/S) 类似MySQL,但采用进程模型,每个连接会启动一个后端进程。 嵌入式 (Embedded) 无服务器架构,直接集成到应用中。 客户端-服务器 (C/S) 与 MySQL 基本相同,可看作其"增强版"。
数据存储 数据存储在服务器管理的多个文件中。 类似 MySQL。 单文件 ,所有数据(表、索引等)存放在一个 .db 文件中。 同 MySQL。
部署与资源 需要安装、配置、启动服务,资源占用较高。 部署步骤与 MySQL 类似,但优化配置不同。 零配置、开箱即用,库文件大小约 600KB-2MB,资源占用极低。 与 MySQL 高度相似,通常可无缝替换。
适用场景 通用Web应用、高并发OLTP、中小型系统、读写分离架构。 企业级应用、复杂数据分析,数据完整性和SQL标准要求高的场景。 移动应用、桌面软件、IoT设备,嵌入式设备和低并发场景。 同 MySQL,适合希望使用 MySQL 但又担心闭源风险 、追求更多开源特性的用户。

⚙️ 2. 创建库,选择引擎

对比项 MySQL PostgreSQL SQLite MariaDB
核心设计 插件式存储引擎架构 一体化架构 + 丰富扩展机制 嵌入式、零配置 同 MySQL,但增强/新增了多种存储引擎
存储引擎 InnoDB (默认) ,支持事务、行级锁、外键 。 另有 MyISAM (无事务,读多写少)、MEMORY 等。 统一存储引擎,所有功能集中优化,无插件引擎概念。 单一存储引擎,无引擎可选概念。 除 MySQL 支持的引擎外,还有: Aria (MyISAM的增强版,更稳定)。 ColumnStore (列式存储,适用OLAP)。 MyRocks (基于RocksDB,高压缩比)。 支持同一张表使用不同引擎

📝 3. SQL语法层面

3.1 常见数据类型对比
数据类型 MySQL PostgreSQL SQLite MariaDB
整数 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT SMALLINT, INTEGER, BIGINT 9†L20-L21 INTEGER (可自动识别类型) 与 MySQL 完全兼容
浮点数/精确数 FLOAT, DOUBLE, DECIMAL9†L21-L23 REAL, DOUBLE PRECISION, DECIMAL/NUMERIC9†L21-L23 REAL, NUMERIC20†L8 同 MySQL
字符串 CHAR, VARCHAR, TEXT (含 TINYTEXT, MEDIUMTEXT, LONGTEXT) CHAR, VARCHAR, TEXT 10†L27-L30 TEXT (无长度限制区分) 同 MySQL
布尔值 BOOLEAN/BOOL (实际是 TINYINT(1) 别名) 原生 BOOLEAN 类型 无原生类型 (通常用0/1) 同 MySQL
日期时间 DATE, TIME, DATETIME, TIMESTAMP, YEAR DATE, TIME, TIMESTAMP, TIMESTAMPTZ TEXT/INTEGER/REAL 同 MySQL
JSON MySQL 5.7+ 支持 JSON 类型,支持有限索引 支持 JSON 和高效的 JSONB (二进制) 类型,支持 GIN 索引高效检索 无原生支持 存储为 TEXT,无二进制 JSONB 类型
高级类型 有限支持 (无数组、UUID等) 支持 数组、UUID、HSTORE、网络地址、几何类型、范围类型 不支持 基本与 MySQL 相同
3.2 创建索引与主键
索引维度 MySQL (InnoDB) PostgreSQL SQLite MariaDB
索引类型 B-Tree (默认), Hash , Full-Text , R-Tree (空间索引) B-Tree (默认), Hash, GIN, GiST, SP-GiST, BRIN B-Tree 5†L8 与 MySQL 类似,新增了更多索引算法的支持
主键实现 聚簇索引。数据和主键索引存储在一起,表本身就是索引组织表 堆表 + 二级索引。没有专门的"主键索引",所有索引都指向元组ID (TID) 与 PostgreSQL 类似,是一个隐藏的 ROWID 同 MySQL (InnoDB引擎)
函数/部分索引 8.0+ 支持函数索引;不支持部分索引 支持函数索引和部分索引 (带WHERE条件的索引) 不支持 8.0+ 支持函数索引;不支持部分索引
索引并发创建 不支持并发创建,会阻塞写操作 支持 CREATE INDEX CONCURRENTLY不阻塞写操作 不支持 同 MySQL
3.3 CRUD语法差异
SQL操作 MySQL PostgreSQL SQLite MariaDB
字符串连接 CONCAT('Hello', 'World') `'Hello' 'World'`
分页查询 SELECT ... LIMIT offset, countLIMIT count OFFSET offset SELECT ... LIMIT count OFFSET offset (标准语法) 同 PostgreSQL (推荐标准语法) 同 MySQL
自增列/序列 AUTO_INCREMENT,用 LAST_INSERT_ID() 获取最后ID SERIALIDENTITY,用 RETURNING 子句或 CURRVAL() 获取ID AUTOINCREMENT 关键字 同 MySQL,也支持 AUTO_INCREMENT
字符串引号 支持单引号双引号表示字符串 仅支持单引号表示字符串 仅支持单引号 同 MySQL
注释语法 # 单行注释-- 单行注释 -- 单行注释 (需跟空格) 同 PostgreSQL 同 MySQL

相关推荐
阳光是sunny7 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
EMA13 小时前
Docker虚拟化失败解决方案
架构
李斯维14 小时前
从历史的角度看 Android 软件架构
android·架构·android jetpack
JouYY16 小时前
聊一下多 Agent 编排架构的应用实践
架构·llm·agent
Sunia16 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi2 天前
Q01-高并发点赞系统架构设计
架构
笨鸟飞不快2 天前
从 MVC 到 DDD:一次真实的渐进式迁移实录
后端·架构
这个DBA有点耶3 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
锋行天下3 天前
我试图优化 Vite 的拆包,结果首屏慢了 10 倍
前端·vue.js·架构