PostgreSQL(PGSQL)从入门到精通:一站式数据库操作指南
1. 为什么选择PostgreSQL第一次接触PostgreSQL是在2013年当时我需要为一个电商项目选型数据库。MySQL虽然流行但在处理复杂查询和JSON数据时总是力不从心。同事推荐了PostgreSQL试用后发现它的JSONB类型简直是为电商商品属性量身定定的——这个决定让我少加了三个月班。PostgreSQL最让我惊艳的是它瑞士军刀般的特性集合。比如地理空间数据支持去年做物流系统时直接用PostGIS计算配送距离省去了接入第三方服务的麻烦。还有它强大的扩展性上周刚用TimescaleDB插件实现了时序数据存储代码量比用专用时序数据库少了60%。安装PostgreSQL比想象中简单。在Ubuntu上一条命令就能搞定sudo apt-get update sudo apt-get install postgresql postgresql-contrib安装完成后别忘了设置密码sudo -u postgres psql \password postgres2. 从零开始玩转基础操作新手最常问我的问题是建表时到底该用哪种数据类型这里分享个实用技巧整数用INT金额用NUMERIC(10,2)文本用VARCHAR但记得加长度限制时间戳用TIMESTAMPTZ自动处理时区转换。去年有个项目因为用了TIMESTAMP导致跨国用户时间错乱血泪教训啊。几个必知必会的SQL示例-- 创建带注释的表这个习惯能救后来的维护者 CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(255) CHECK (email LIKE %%.%), created_at TIMESTAMPTZ DEFAULT NOW() ); COMMENT ON TABLE users IS 系统用户表;查询时多用EXPLAIN分析性能。有次优化接口响应时间发现加上这个索引后查询从800ms降到20msCREATE INDEX idx_users_username ON users (username);3. 高级功能实战技巧事务处理是数据库的核心能力。我习惯用SAVEPOINT做嵌套事务就像游戏存档点BEGIN; UPDATE accounts SET balance balance - 100 WHERE user_id 1; SAVEPOINT transfer_money; UPDATE accounts SET balance balance 100 WHERE user_id 2; -- 模拟出错场景 ROLLBACK TO transfer_money; COMMIT;JSONB操作是PostgreSQL的杀手锏。处理电商SKU属性时这样用-- 查询所有红色且尺寸为XL的商品 SELECT * FROM products WHERE attributes {color:red, size:XL};4. 性能调优与运维实战慢查询日志一定要开在postgresql.conf里设置log_min_duration_statement 200 # 记录超过200ms的查询备份策略我推荐WAL归档基础备份组合拳。每周全量备份每天增量备份# 基础备份 pg_basebackup -D /backups/base -Ft -z -P -U postgres # 定时归档 archive_command test ! -f /backups/wal/%f cp %p /backups/wal/%f遇到连接数爆满时先查活跃连接SELECT * FROM pg_stat_activity WHERE state active;然后调整max_connections参数但更建议用连接池如PgBouncer。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2428415.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!