我正在尝试写一个函数来加载csv数据到一个表中。我希望输入参数是文件的路径。
CREATE OR REPLACE FUNCTION public.loaddata(filepathname varchar)
RETURNS void AS
$BODY$
BEGIN
COPY climatedata(
climatestationid,
date,
prcp,
prcpqflag,
prcpmflag,
prcpsflag,
tmax,
tmaxqflag,
tmaxmflag,
tmaxsflag,
tmin,
tminqflag,
tminmflag,
tminsflag)
FROM $1
WITH csv header;
END;
$BODY$
LANGUAGE plpgsql;
当我尝试创建这个函数时,我得到:
$1处语法错误
有什么不对吗?
1条答案
按热度按时间pvcm50d11#
COPY
不允许变量替换。只有使用核心DML命令SELECT
、INSERT
、UPDATE
和DELETE
时才允许变量替换。请参阅:您需要使用
EXECUTE
的动态SQL:format()
需要PostgreSQL 9.1以上版本。传递文件名,不使用额外的(转义的)单引号:
format()
与%L
安全地引用文件名。如果没有它,将容易受到SQL注入的影响。