PostgreSQL中如何从子查询批量将数据插入另一表?
批量插入PostgreSQL表的简单解决方案
嗨,其实你完全不用折腾存储过程来实现这个需求,PostgreSQL本身就提供了简洁高效的批量插入语法,而且它早就支持存储过程了(从11版本开始正式引入PROCEDURE类型,更早版本也可以用函数实现类似逻辑),不过这个场景真的没必要用到存储过程~
首先纠正你之前写的SQL错误:你用了INSERT ... VALUES(SELECT ...)的写法,这不符合PostgreSQL的语法规范。要实现批量插入,直接用INSERT ... SELECT结构就可以了,不需要VALUES关键字。
基础批量插入语句
如果只是要把beta表中所有的school_name批量插入到alpha表,直接执行这条SQL就行:
INSERT INTO alpha (school_name) SELECT school_name FROM beta;
- 如果你
alpha表的id字段是自增类型(比如serial或者GENERATED AS IDENTITY),PostgreSQL会自动为每一条插入的记录生成对应的id值,不需要你手动指定。
去重插入(可选)
如果beta表中存在重复的school_name,你不想把重复值插入到alpha表,可以加上DISTINCT关键字去重:
INSERT INTO alpha (school_name) SELECT DISTINCT school_name FROM beta;
关于PostgreSQL存储过程的补充
你之前误以为PostgreSQL不支持存储过程,其实从PostgreSQL 11开始就正式支持了,用CREATE PROCEDURE语句创建。不过对于这种简单的批量插入场景,单条INSERT ... SELECT语句已经足够高效,完全不需要额外写存储过程来实现。
内容的提问来源于stack exchange,提问作者user8910784
相关产品推荐
相关产品推荐

