PostgreSQL 循环中复制命令的错误

问题描述


我正在 Postgresql 13 中编写一个简单的函数,但有一些我无法解决错误。这是重现错误的简化代码

create or replace function my_schema.test_function(some_directory text default 'Downloads')
returns void
language plpgsql
as

$body$
declare
    home_dir text := '/home/my_user_name/';
    file_path text;
    one_csv text;
    csv_arr text[] = array['file_1.csv','file_2.csv','file_3.csv'];
begin
    
    drop table if exists to_insert;
    create temp table to_insert(col1 text,col2 timestamptz);
    
    foreach one_csv in array csv_arr
    loop
        file_path = home_dir || some_directory || '/' || one_csv;
        copy to_insert (col1,col2)
        from file_path
        delimiter ','
        csv header;
    end loop;
    
    delete from my_schema.target_table;
    insert into my_schema.target_table
    select * from to_insert;
    
    drop table if exists to_insert;
end
$body$

抱歉没有突出显示,我不知道如何在stackoverflow上突出显示Postgresql
我在运行代码时得到的错误是:

ERROR:  Syntax error at or near "file_path"
LINE 22:   from file_path

如果不是 file_path 我只是拼出路径,例如'/home/my_user_name/Downloads/file_1.csv',然后代码按预期执行而没有任何错误。但这当然不是我想做的。我需要为每个循环变量构建不同的路径。
知道我缺少什么以及如何使我的功能正常工作吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)