gpt4 book ai didi

postgresql - plpgsql For循环中的Select语句创建多个CSV文件

转载 作者:行者123 更新时间:2023-11-29 11:36:16 25 4
gpt4 key购买 nike

我想重复以下查询 8760 次,将“2”替换为 1 到 8760 一年中的每个小时。这个想法是为每个小时创建一个单独的 CSV 文件以供进一步处理。

COPY 
(SELECT *
FROM
public.completedsolarirad2012
WHERE
completedsolarirad2012."UniquetmstmpID" = 2)
TO 'C:\temp\2012hour2.csv' WITH DELIMITER ','
CSV HEADER

我整理了以下功能(仅测试了几个小时):

CREATE OR REPLACE FUNCTION everyhour()
RETURNS void AS
$BODY$BEGIN
FOR i IN 0..5 LOOP
EXECUTE $x$
COPY (
SELECT *
FROM
public.completedsolarirad2012
WHERE
completedsolarirad2012."UniquetmstmpID" = i
)
TO $concat$ 'C:\temp.' || i::text
|| '.out.csv' WITH DELIMITER ',' CSV HEADER $concat$
$x$;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION everyhour()
OWNER TO postgres;

我似乎有两个不同的问题:

首先,我得到:

Error: column "i" does not exist.

其次,当我仅通过将“i”替换为例如“2”,我得到:

Error: relative path not allowed for COPY to file

我是 postgres super 用户,所以我不明白为什么我会遇到这个问题。

注意:删除连接语句周围的 $concat$ 双引号会产生以下错误:

ERROR:  syntax error at or near "||"
LINE 9: TO 'C:\temp.' || i::text

如有任何帮助,我将不胜感激。

最佳答案

假设您的服务器操作系统是 Windows。

CREATE OR REPLACE FUNCTION everyhour()
RETURNS void AS
$func$
BEGIN
FOR i IN 0..5 LOOP
EXECUTE '
COPY (
SELECT *
FROM public.completedsolarirad2012 c
WHERE c."UniquetmstmpID" = ' || i || $x$)
TO 'C:/temp.'$x$ || i || $x$'.out.csv' WITH DELIMITER ',' CSV HEADER$x$;
END LOOP;
END
$func$ LANGUAGE plpgsql;
  • 你的一层美元报价太多了。
  • 您还不小心连接了字母“i”而不是它的值。
  • 使用正斜杠,即使在 Windows 中也是如此。或者您可能需要加倍反斜杠,具体取决于您的设置。此相关答案中的更多信息:
    PostgreSQL: export resulting data from SQL query to Excel/CSV

使用 format() 更简单

从 Postgres 9.1 开始你可以使用 format()简化复杂的连接:

CREATE OR REPLACE FUNCTION everyhour()
RETURNS void AS
$func$
BEGIN
FOR i IN 0..5 LOOP
EXECUTE format($x$COPY (
SELECT *
FROM public.completedsolarirad2012 c
WHERE c."UniquetmstmpID" = %1$s)
TO 'C:/temp.%1$s.out.csv' WITH DELIMITER ',' CSV HEADER$x$, i);
END LOOP;
END
$func$ LANGUAGE plpgsql;

关于postgresql - plpgsql For循环中的Select语句创建多个CSV文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com