【问题标题】:Is it possible to write a PostgreSQL query that exports different tables by using a loop?是否可以编写一个使用循环导出不同表的 PostgreSQL 查询?
【发布时间】:2014-08-05 23:41:04
【问题描述】:

我想导出几个表,但每个表都是在不同的条件下创建的,并且具有不同的文件名。例如,可以在某个id等于x的条件下创建一个表,并将这个表导出到一个名为table_x.txt的文件中。这可以通过使用以下(简单)查询来完成。

COPY(
SELECT *
FROM table
WHERE table.id=x
)
TO '/home/table_x.txt'
;

但是,我不想这样做大约 100 次,而是想生成一个循环,对不同的 x 值执行此查询。这可能吗?我不需要在我的数据库中保存不同的表,我只想将它们导出到不同的文本文件。

【问题讨论】:

    标签: sql postgresql loops


    【解决方案1】:

    你可以使用类似的东西:

    DO $$
    DECLARE r record;
    BEGIN
      FOR r IN 
                SELECT id FROM id_list
      LOOP
        COPY(
          SELECT *
          FROM table
          WHERE table.id=r.id
        )
        TO '/home/table_'||r.id||'.txt';
      END LOOP;
    END $$;
    

    这是一个匿名的 PL/SQL 函数,它将遍历 SELECT id FROM id_list 中的 id 并为每个 id 执行 COPY

    【讨论】:

    • 你确定这是合法的吗?COPY 中的表达式,在 PL/PgSQL 中?我期待需要EXECUTE
    • @CraigRinger 它确实在“||”处或附近给出了语法错误。这个查询还在 DO 处或附近给了我一个语法错误,所以我用“CREATE OR REPLACE FUNCTION test() RETURNS void AS $$”替换了这一行,并将语言设置为 plpgsql。我在 pgAdmin 工作并使用了this 帖子。这是正确的吗?
    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多