如何使用psql在PostgreSQL中实现指定循环插入代码?
在PostgreSQL中实现SQL Server风格的循环插入
1. 用PL/pgSQL模拟循环逻辑(贴近原SQL写法)
如果你习惯SQL Server的循环写法,可以用PostgreSQL的PL/pgSQL匿名块实现相同逻辑:
DO $$ DECLARE id INT := 1; BEGIN WHILE id <= 100 LOOP -- 建议显式指定字段名,避免表结构变更导致错误 INSERT INTO tblAuthors (author_name, country) VALUES ( 'Author - ' || id::VARCHAR(10), 'Country - ' || id::VARCHAR(10) || ' name' ); RAISE NOTICE '%', id; -- 替代SQL Server的Print语句 id := id + 1; END LOOP; END $$;
关键差异说明:
- PostgreSQL用
DO $$ ... $$包裹匿名PL/pgSQL代码块 - 变量声明放在
DECLARE段,赋值用:=(也支持=,但:=是SQL标准写法) - 字符串连接用
||,+在PostgreSQL中仅用于数值运算 - 打印信息用
RAISE NOTICE,执行时psql会输出这些内容
2. 更高效的批量插入方式(PostgreSQL推荐)
PostgreSQL更适合集合式操作,用generate_series生成序列可以一次性完成插入,性能远优于循环:
INSERT INTO tblAuthors (author_name, country) SELECT 'Author - ' || num::VARCHAR(10), 'Country - ' || num::VARCHAR(10) || ' name' FROM generate_series(1, 100) AS num;
如果需要查看生成的数字,单独执行以下语句即可:
SELECT num FROM generate_series(1, 100) AS num;
内容的提问来源于stack exchange,提问作者radical_edo
相关产品推荐
相关产品推荐

