news 2026/7/14 10:42:36

PostgreSQL 入门实战(一)-- 从零搭建到数据操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PostgreSQL 入门实战(一)-- 从零搭建到数据操作

1. PostgreSQL简介与安装准备

PostgreSQL是一款功能强大的开源关系型数据库,被广泛认为是"开源界的Oracle"。它支持SQL标准并提供丰富的企业级特性,包括复杂查询、事务完整性、多版本并发控制等。我第一次接触PostgreSQL是在2013年为一个电商项目选型数据库时,当时就被它的稳定性和扩展性所吸引。

1.1 为什么选择PostgreSQL

相比其他数据库,PostgreSQL有几个显著优势:

  • 完全开源:采用自由的BSD许可证,可以自由使用和修改
  • 功能丰富:支持JSON、GIS地理信息、全文搜索等高级特性
  • 高度可扩展:可以自定义数据类型、函数、操作符等
  • 稳定性强:适合处理高并发和大量数据的场景

我曾在生产环境用PostgreSQL处理过日增百万级数据的场景,即使在数据量暴涨时性能依然稳定。

1.2 安装前准备

根据你的操作系统选择安装方式:

Linux系统安装

对于Ubuntu/Debian系统:

sudo apt update sudo apt install postgresql postgresql-contrib

对于CentOS/RHEL系统:

sudo yum install postgresql-server postgresql-contrib sudo postgresql-setup initdb sudo systemctl start postgresql
Windows系统安装
  1. 从官网下载安装包
  2. 运行安装向导,记住设置的密码
  3. 安装完成后可以在开始菜单找到pgAdmin图形工具
macOS系统安装

使用Homebrew安装最为简单:

brew install postgresql brew services start postgresql

安装完成后,默认会创建一个名为postgres的系统用户和数据库超级用户。我第一次安装时就犯了个错误,直接用root操作导致权限问题,后来发现应该切换到postgres用户操作。

2. 初始配置与数据库创建

2.1 配置访问权限

安装后首先需要配置允许远程或本地连接。编辑配置文件:

sudo nano /etc/postgresql/12/main/postgresql.conf

找到listen_addresses行,修改为:

listen_addresses = '*' # 允许所有IP连接

然后修改客户端认证文件:

sudo nano /etc/postgresql/12/main/pg_hba.conf

在文件末尾添加:

# 允许所有本地连接使用密码认证 local all all md5 # 允许所有远程连接使用密码认证 host all all 0.0.0.0/0 md5

重启服务使配置生效:

sudo service postgresql restart

2.2 创建第一个数据库

切换到postgres用户:

sudo -i -u postgres

创建新用户和数据库:

CREATE USER myuser WITH PASSWORD 'mypassword'; CREATE DATABASE mydb OWNER myuser; GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

测试连接:

psql -U myuser -d mydb -h 127.0.0.1

如果连接成功,你会看到提示符变成mydb=>。我在第一次创建用户时忘记赋权,导致无法操作数据库,后来通过GRANT命令解决了这个问题。

3. 基础表操作与数据管理

3.1 创建和管理表

连接数据库后,我们来创建第一个表:

CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, price DECIMAL(10,2) CHECK (price > 0), stock INT DEFAULT 0, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP );

这里有几个实用技巧:

  1. SERIAL是自增整数,适合做主键
  2. CHECK约束确保价格为正数
  3. DEFAULT设置默认值
  4. 时间戳带时区是个好习惯

查看表结构:

\d products

3.2 数据增删改查

插入数据:

INSERT INTO products (name, price, stock) VALUES ('笔记本电脑', 5999.99, 10), ('智能手机', 2999.50, 20);

查询数据:

-- 基本查询 SELECT * FROM products; -- 条件查询 SELECT name, price FROM products WHERE price > 3000; -- 排序和限制 SELECT * FROM products ORDER BY price DESC LIMIT 1;

更新数据:

UPDATE products SET stock = stock - 1 WHERE id = 1;

删除数据:

DELETE FROM products WHERE stock = 0;

我曾经在一个促销活动中因为没有加WHERE条件,误删了整个产品表,幸好有备份。所以提醒大家:执行DELETE前一定要再三确认WHERE条件!

4. 高级数据操作技巧

4.1 事务处理

PostgreSQL支持完整的事务特性:

BEGIN; UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; UPDATE accounts SET balance = balance + 100 WHERE user_id = 2; COMMIT;

如果中间出错可以回滚:

BEGIN; -- 一些操作 SAVEPOINT my_savepoint; -- 更多操作 ROLLBACK TO my_savepoint; -- 继续操作 COMMIT;

4.2 批量导入导出数据

从CSV导入数据:

COPY products(name, price, stock) FROM '/path/to/products.csv' DELIMITER ',' CSV HEADER;

导出数据到CSV:

COPY products TO '/path/to/export.csv' WITH CSV HEADER;

我曾经用COPY命令在10秒内导入了50万条数据,比用INSERT快太多了。

4.3 使用索引提高查询速度

为常用查询字段创建索引:

CREATE INDEX idx_products_price ON products(price);

查看查询计划分析性能:

EXPLAIN ANALYZE SELECT * FROM products WHERE price > 1000;

注意:索引不是越多越好,每个索引都会增加写入时的开销。我曾经在一个频繁更新的表上建了太多索引,导致写入性能下降了70%。

5. 实用维护与管理

5.1 备份与恢复

使用pg_dump进行逻辑备份:

pg_dump -U myuser -d mydb -f backup.sql

恢复备份:

psql -U myuser -d mydb -f backup.sql

对于大型数据库,可以使用并行备份:

pg_dump -j 4 -F d -f /backup/dir mydb

5.2 性能监控

查看当前活动连接:

SELECT * FROM pg_stat_activity;

查看表空间使用情况:

SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename))) FROM pg_tables ORDER BY pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename)) DESC;

5.3 常见问题解决

连接数不足:修改max_connections参数后需要重启服务。

性能下降:定期运行VACUUM ANALYZE可以优化数据库性能。

忘记密码:可以修改pg_hba.conf临时设置为trust认证,登录后再修改密码。

记得有一次生产环境数据库突然变慢,后来发现是autovacuum没有及时运行导致表膨胀,手动执行VACUUM后性能立即恢复了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 10:42:27

头歌实践教学平台:透视投影变换的实战演练与代码实现

1. 透视投影变换的基本原理 我第一次接触透视投影时,也被那些复杂的矩阵运算搞得头晕眼花。后来在头歌平台反复调试代码才发现,透视投影本质上就是模拟人眼观察世界的规律——近大远小。想象你站在铁轨中间向远处看,两条平行铁轨会在视线尽头…

作者头像 李华
网站建设 2026/7/14 10:41:23

如何让键盘操作“活“起来:Bongo Cat Mver终极可视化指南

如何让键盘操作"活"起来:Bongo Cat Mver终极可视化指南 【免费下载链接】Bongo-Cat-Mver An Bongo Cat overlay written in C 项目地址: https://gitcode.com/gh_mirrors/bo/Bongo-Cat-Mver 你是否曾经在直播编程时,观众完全看不懂你的…

作者头像 李华
网站建设 2026/7/14 10:39:52

C++类型转换:从C风格到四种命名强制转换的安全迁移指南

1. 项目概述:为什么C程序员必须精通类型转换? 如果你写过C,尤其是从C语言转过来的,肯定对 (int)3.14 这种写法不陌生。这看起来简单直接,不就是把浮点数变成整数吗?但当你开始接触C的 static_cast 、 …

作者头像 李华
网站建设 2026/7/14 10:39:05

微博图片批量下载工具:3步实现海量图片自动化保存

微博图片批量下载工具:3步实现海量图片自动化保存 【免费下载链接】weibo-image-spider 微博图片爬虫,极速下载、高清原图、多种命令、简单实用。 项目地址: https://gitcode.com/gh_mirrors/we/weibo-image-spider 还在为手动保存微博图片而烦恼…

作者头像 李华
网站建设 2026/7/14 10:38:52

从几何到代数:椭圆离心角与坐标映射的深度解析

1. 椭圆的基本概念与几何特性椭圆是平面上到两个定点(焦点)的距离之和为定值的点的轨迹。这个定义听起来有点抽象,我们可以用一个简单的例子来理解:想象一根绳子两端固定在桌面上,用铅笔拉紧绳子画出的图形就是椭圆。椭…

作者头像 李华