如何解决在PostgreSQL中将每行查询导出到CSV
我有一个users
表,其中有一个id
,first_name
和last_name
。
我还有一个messages
表,其中有一个user_id
和一个text
。
如何为每个用户将用户的邮件导出到CSV文件 ?
我可以为一个用户这样做:
COPY (SELECT text FROM messages WHERE user_id = "my user id") to "Firstname_Lastname.csv" DELIMITER ',' CSV HEADER;
但是postgres似乎没有for循环或什么?我做了一些谷歌搜索,偶然发现LATERAL
,但无法正常工作...
解决方法
使用Adrian的链接以及在屏幕上进行的大量阅读和诅咒,我一起砍了一些东西:
CREATE OR REPLACE FUNCTION export()
RETURNS integer
LANGUAGE plpgsql
AS $$
DECLARE
myuser RECORD;
filename TEXT;
BEGIN
FOR myuser IN SELECT id,first_name,last_name FROM users LOOP
RAISE NOTICE 'user %',myuser;
EXECUTE $$SELECT '/home/me/' || $1 || '_' || $2 || '.csv'$$ INTO filename USING myuser.first_name,myuser.last_name;
RAISE NOTICE 'filename %',filename;
EXECUTE $$COPY (SELECT text FROM messages WHERE user_id = '$$ || myuser.id || $$') TO '$$ || filename || $$' DELIMITER ',' CSV HEADER$$;
END LOOP;
RETURN 1;
END;
$$
我肯定这是一团糟,完全不是惯用语言。但这对我有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。