首页 > 解决方案 > Postgresql 11 - 创建执行 COPY 函数的过程

问题描述

我目前正在尝试创建一个过程,以便在调用该过程时自动将数据复制到我的数据库中。但是,每次我调用它时,都会出现以下错误:

ERROR:  column "name" does not exist
LINE 1: SELECT format('COPY test(%L) FROM %s CSV HEADER', name, '/Us...

列怎么不存在?这是我写的所有内容:

CREATE PROCEDURE 
test_insert() AS
$$ 

BEGIN 

EXECUTE format('COPY test(%L) FROM %s CSV HEADER', name, '/Users/Receiving.csv');


END; 

$$ LANGUAGE plpgsql;

标签: sqlpostgresqlplpgsqlsqlbulkcopy

解决方案


如果不使用name单引号,则被解释为(默认)SELECT语句中的列名

SELECT format('...', name, '...')

PL/pgSQL 在你执行你的函数时运行。

由于此SELECT语句没有FROM子句,因此您会看到观察到的错误。

解决方案是改用字符串文字,即写'name'而不是'name'。


推荐阅读