plpgsql:将变量串联到 FROM 子句中
我是 Postgresql 新手,正在努力构建一个函数来循环一系列 CSV 文件并加载它们。我可以使 COPY 在单个文件中正常工作,但我无法使 FOR LOOP 语法正确。我正在尝试替换年份数字,因为我的苍蝇被命名为 /path/tmp.YEAR.out.csv
这就是我所破解的:
CREATE OR REPLACE FUNCTION test() RETURNS void as $$
BEGIN
FOR i IN 1982..1983 LOOP
COPY myTable
FROM '/path/tmp.' || i::VARCHAR || '.out.csv'
delimiters ','
END LOOP;
END;
$$ LANGUAGE 'plpgsql';
这会在第一个 || 处引发错误。所以我怀疑我对变量 i
的连接管理不正确。有什么建议吗?
I'm new to Postgresql and struggling to build a function for looping over a series of CSV files and loading them. I can make the COPY work just fine with a single file, but I'm unable to get the FOR LOOP syntax correct. I'm trying to substitute a year number as my flies are named /path/tmp.YEAR.out.csv
This is what I've hacked up:
CREATE OR REPLACE FUNCTION test() RETURNS void as $
BEGIN
FOR i IN 1982..1983 LOOP
COPY myTable
FROM '/path/tmp.' || i::VARCHAR || '.out.csv'
delimiters ','
END LOOP;
END;
$ LANGUAGE 'plpgsql';
This throws an error at the first ||. So I suspect I'm managing the concat of the variable i
improperly. Any tips?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为我不会为此使用 plpgsql。 shell 脚本可能更普遍有用:
示例用法:
注意:这样您还可以避免使用 COPY 读取文件的问题,这需要 postgres 服务器用户对文件具有读取权限。
I don't think I'd use plpgsql for that. A shell script could be much more generally useful:
example usage:
Note: This way you also sidestep the problem of reading files with COPY which requires the postgres server user to have read permissions on the file.