想象一下,你收到一个关于学生信息的CSV文件,比如从另一个数据库或者第三方应用导出的。要手动复制每一条记录?算了吧,谁愿意干这种事。这时候批量导入数据就派上用场了。
下面这些场景,批量导入数据绝对能救你一命:
- 数据迁移:需要把数据从一个系统转移到另一个系统。比如,从Excel或者其他数据库导入到PostgreSQL。
- 数据库初始化:给你的数据库填充初始数据,比如城市列表、课程或者商品类别。
- 与外部系统集成:定期添加新数据,比如通过文件更新第三方数据。
- 大批量数据更新:需要用最新的数据替换掉旧数据。
到这里都明白吧?如果OK,那我们继续!
批量导入数据的主要方法
在深入细节之前,咱们先简单聊聊,怎么才能一次性往数据库里加一大堆数据,而不是一两行。我们会讲讲用SQL语句怎么搞,然后再看看更方便、更现代的方式——从文件导入数据。
用SQL语句插入数据
你应该已经知道,添加数据可以用INSERT INTO命令。如果数据不多,这招挺好用。比如:
INSERT INTO students (id, name, age, course)
VALUES (1, 'Otto Lin', 20, '编程');
但如果你要插入几十、几百甚至几千行,这种方式就太低效了。当然,你可以在代码里自动化这些操作,但手动维护这么多插入语句,真的很麻烦也很容易出错。
从文件导入
所以大家经常用文件导入,比如CSV(Comma-Separated Values)。这是一种很简单的文本格式,每一行就是一条记录,值之间用逗号或者分号分隔。
CSV文件内容示例:
id,name,age,course
1,Otto Lin,20,编程
2,Maria Chi,21,设计
3,Alex Ming,19,数学
这种格式人和程序都能看懂。CSV可以用Excel打开,也能用Python或者其他语言处理,导入数据库也很方便。用文件批量导入数据比手动插入快多了,而且能减少输入错误。
批量导入前的准备
批量导入能不能顺利,关键在于准备工作。我们要让数据库准备好接收数据,检查结构和数据的正确性。
检查表结构
首先,确保你的数据库里有一张表,结构要和文件对应。比如你要导入学生信息,就得有一张合适的表。
学生数据导入表的例子:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL,
course TEXT
);
注意事项:
- 确保表里的数据类型和你文件里的数据一致。如果
age是数字,那CSV里对应的列也只能是数字。 - 有约束的列(
NOT NULL、UNIQUE)要特别注意数据准备。
检查数据
现在说说数据本身。导入前你得检查这些:
- 没有空行或不合法的值。 比如这一行:
12,,20,编程会报错,因为name是必填项。
分隔符一致。 如果你的CSV用逗号(
,),那就要设置对。如果用分号(;),导入时要指定。编码格式。 PostgreSQL要求文件是UTF-8编码。如果你的文件是别的编码(比如Windows-1251),要先转一下。
程序员小段子,轻松一下
为啥程序员都喜欢用CSV?因为折腾了半天JSON之后,终于能看到“简单”的数据了……直到遇到文本里的逗号。
批量导入的实际应用
在真实项目里,批量导入用得特别多。比如:
- 给网店更新商品目录。几千个商品的CSV文件,几秒钟就能导进去。
- 把客户从一个CRM系统迁移到另一个。所有客户、地址和订单数据都能从CSV导入到PostgreSQL。
- 做数据分析时,需要导入一个月的销售数据来分析。
现在你已经明白为什么要批量导入、怎么准备了,接下来我们就能讲具体的数据导入工具,比如COPY命令。这个我们下节课再说。
GO TO FULL VERSION