Lehman-Blog - PostgreSQL
type: channel
link: https://blog.lehman.top/tag/PostgreSQL/
items: 新时代的数据库全景：从业务基石到 AI 记忆库
items: PostgreSQL常用问题汇总
items: PostgreSQL常用功能汇总
items: PostgreSQL-DDL/DML/DCL/DQL

新时代的数据库全景：从业务基石到 AI 记忆库
type: item
date: 2026-06-25T14:50:00+08:00
description: 前言上周有个朋友问我：「我们新项目刚立项，MySQL 够不够用？要不要一步到位上向量库？」我反问：「你们是要做电商下单，还是要做企业知识问答？」他愣了两秒：「……都要。」这就是 2026 年做后端最常踩的坑——把「选一个数据库用到退休」当成架构目标。业务一多元、AI 一进场，数据库早就不是「一招鲜吃遍天」的时代了。关系型、缓存、向量、NoSQL 各守一块地盘，拼起来才是现代系统的常态。结论：没有银弹，只有 Polyglot Persistence（多模持久化）——让专业的库干专业的事。[scode type="red"]别指望一个数据库包打天下，那是 PPT 架构，不是生产架构。[/scode]下面按我自己梳理选型时的思路，把 2026 年主流数据库的门派和战场过一遍。全文不堆版本号和 benchmark——那些东西三个月一过期，定位和场景才是不容易过时的。关系型：Still the 业务基石关系型数据库（RDBMS）是最老派、也最不能省的那一层。数据按二维表存，事务严格走 ACID（原子性、一致性、隔离性、持久性）——翻译成人话就是：钱和库存这种事儿，错一条都不行。我把它比作公司里的「账本会计」：花样不多，但每一笔都得对得上。AI 再火，下单扣库存、银行转账这类链路，短期内还是绕不开它。MySQL 和 PostgreSQL 怎么选？我自己的粗线条是：团队熟 MySQL、业务偏 Web 和电商，MySQL 省心；复杂查询、地理信息、需要 JSON 和扩展插件同台，PostgreSQL 更香。Oracle 则是「关键任务 + 预算充足 + 运维团队扛得住」的组合，不是创业公司第一天该想的事。产品核心定位最佳战场MySQL轻量开源，生态成熟，Web 应用事实标准中小型互联网、电商后台、创业公司快速迭代PostgreSQL功能全面的开源数据库，复杂查询与扩展能力强复杂业务逻辑、科研数据处理、GIS / LBSOracle企业级闭源商业库，稳定性与安全性标杆银行核心账务、大型国企 ERP、电信计费等关键任务TiDB分布式 SQL，MySQL 协议兼容，HTAP 架构（OLTP + 实时分析同库）MySQL 规模化、需要实时分析又不想搞 ETL 管道的团队OceanBase国产分布式库，金融级 OLTP，支持 MySQL 与 Oracle 双模式租户高并发交易、Oracle 迁移、信创替代TiDB 和 OceanBase 常被放在一起比，但设计重心不一样：TiDB 更偏 HTAP，用 TiFlash 在同一套数据上做实时分析；OceanBase 更偏 极限 OLTP 和 Oracle 替代，多租户模型对从 Oracle 迁过来的团队更友好。具体选型可以看 PingCAP 的 TiDB vs OceanBase 对比。典型场景我一般会先想到这三类：电商交易：下单、扣库存、支付流水——强一致性链路，RDBMS 主场。企业管理：ERP、CRM，表结构固定、关联复杂，MySQL 或 PostgreSQL 都能打。金融账务：转账、信贷、证券交易——数据丢失或错乱等于事故，Oracle 或国产分布式库更常见。国产分布式这条线，2026 年已经能正经上台面了，但别因为「国产」就跳过 POC。TiDB 和 OceanBase 都兼容 MySQL 协议，应用层改动可以很少，真正要验的是：你的慢 SQL、分布式事务边界、运维工具链能不能接住。缓存与内存：给慢 SQL 打肾上腺素当读请求多到把数据库读趴下，就该请缓存出场了。核心思路很简单：把热数据丢进内存，微秒级响应，给后面的 RDBMS 挡流量。Redis 和 Memcached 常被放在一起比，我的口诀是：要数据结构、要持久化选项、要分布式锁 → Redis；只要最简单的 KV、纯缓存、越轻越好 → Memcached。Ignite 则是另一个物种——它不只是缓存，而是带 SQL 和 ACID 的分布式内存数据库，适合「算得比存得还猛」的场景，但运维复杂度也高一档。产品核心定位最佳战场Redis数据结构丰富（String、Hash、List、Set、ZSet 等），生态绝对主流全能缓存、分布式锁、消息队列、排行榜、购物车Memcached极简键值存储，多线程，极致简单纯页面缓存、查询结果集缓存（不需要持久化时）Apache Ignite分布式内存数据库，支持 SQL 与 ACID需要内存级响应的复杂计算、高频交易系统三个场景，我面试候选人时也爱问：秒杀抢购：流量洪峰先打在 Redis 上，拦截重复请求，别让主库直接被击穿。热搜榜 / 战力排行：ZSet 天然适合，实时更新比扫 SQL 快一个数量级。Session / Token：多设备登录状态共享，Redis 当会话仓库很顺手。顺带提醒一句：缓存是加速…

PostgreSQL常用问题汇总
type: item
date: 2024-07-11T17:31:55+08:00

PostgreSQL常用功能汇总
type: item
date: 2024-07-11T17:31:02+08:00

PostgreSQL-DDL/DML/DCL/DQL
type: item
date: 2024-07-11T17:23:12+08:00
description: [scode type="red"]以下示例基于PostgreSQL[/scode][collapse status="false" title="常用DDL"]DDLDDL：[Data Mefinition Language] 数据定义语言关键点： CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE/DROP INDEX 等主要是用在定义或改变表（TABLE）的结构，数据类型，表之间的链接和约束等初始化工作上，他们大多在建立表时使用DDL操作是隐性提交的！不能rollback [scode type="blue"]创建表[/scode]CREATE TABLE employees ( employee_id SERIAL PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), birth_date DATE, hire_date DATE ); [scode type="blue"]修改表[/scode]#添加列 ALTER TABLE employees ADD COLUMN email VARCHAR(100); #修改列类型 ALTER TABLE employees ALTER COLUMN birth_date TYPE TIMESTAMP; #删除列 ALTER TABLE employees DROP COLUMN email; [scode type="blue"]删除表[/scode]DROP TABLE employees; [scode type="blue"]创建视图[/scode]CREATE VIEW employee_names AS SELECT first_name, last_name FROM employees; [scode type="blue"]删除视图[/scode]DROP VIEW employee_names; [/collapse][collapse status="false" title="常用DML"]DMLDML：[Data Manipulation Language] 数据操纵语言关键点： INSERT、UPDATE、DELETE主要是对表数据进行操作，如对表数据进行增、删、改[scode type="blue"]插入数据[/scode]#插入单行数据 INSERT INTO employees (first_name, last_name, birth_date, hire_date) VALUES ('John', 'Doe', '1990-01-01', '2020-01-01'); #插入多行数据 INSERT INTO employees (first_name, last_name, birth_date, hire_date) VALUES ('Jane', 'Doe', '1992-02-02', '2021-02-02'), ('Jim', 'Beam', '1985-03-03', '2019-03-03'); [scode type="blue"]更新数据[/scode]#更新单个字段 UPDATE employees SET hire_date = '2021-01-01' WHERE employee_id = 1; #更新多个字段 UPDATE employees SET first_name = 'Jonathan', last_name = 'Smith' WHERE employee_id = 2; [scode type="blue"]删除数据[/scode]#删除符合条件的行 DELETE FROM employees WHERE employee_id = 3; #删除所有数据（但保留表结构） DELETE FROM employees; [/collapse][collapse status="false" title="常用DCL"]DCLDCL： [Data Control Language] 数据控制语言关键点： GRANT、REVOKE主要主要用于控制数据库的访问权限和安全性[scode type="blue"]授予权限[/scode]#授予用户对表的全部权限 GRANT ALL PRIVILEGES ON TABLE employees TO user_name; #授予用户对表的特定权限 GRANT SELECT, INSERT, UPDATE ON TABLE employees TO user_name; #授予角色权限 GRANT SELECT ON TABLE employees TO role_nam…