PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

2.4. 向表中插入数据行 #

使用 INSERT 语句向表中追加数据行:

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

请注意,所有数据类型的字面量输入格式都非常直观。非纯数字的常量通常必须使用单引号(')包裹,如上例所示。date 日期类型支持非常宽泛的输入格式,但在本教程中我们坚持使用此处展示的无歧义标准 ISO 格式。

point 点类型需要一组坐标对作为输入,格式如下:

INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');

上述语法要求必须严格记住表中各个列定义的先后顺序。另一种更健壮的语法允许显式声明列清单:

INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
    VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');

在显式声明列时,你可以按任意顺序排列列名,甚至可以省略某些不需要赋值的列(例如降水量未知时):

INSERT INTO weather (date, city, temp_hi, temp_lo)
    VALUES ('1994-11-29', 'Hayward', 54, 37);

许多工程实践都推荐显式列出目标列,这比依赖隐式的列定义顺序更健壮安全。

请完整输入上述演示的各项命令,以便为后续章节的查询操作准备基础数据。

你也可以使用 COPY 命令从纯文本文件中快速批量载入海量数据。COPY 专为大规模数据导入做了深度性能优化,执行速度通常远高于单条 INSERT。示例命令如下:

COPY weather FROM '/home/user/weather.txt';

由于该命令是由数据库服务端后台进程直接读取文件,因此源文件必须存放于数据库服务器所在的物理主机上,且对数据库运行用户具有读权限。刚才插入到天气表中的记录,也可以通过包含以下制表符分隔内容的文本文件直接批量导入:

San Francisco    46    50    0.25    1994-11-27
San Francisco    43    57    0.0    1994-11-29
Hayward    37    54    \N    1994-11-29

关于 COPY 命令的更多高级参数,详见 COPY。