将使用 prepare 语句的动态查询的输出保存到 table

Saving the output of a dynamic query that uses prepare statement into a table

继续 (@Erwin Brandstetter 的解决方案),其中使用 a 'prepare' 语句的动态 SELECT 查询 被创建,然后被调用执行,如下:

--准备语句的函数:

CREATE OR REPLACE FUNCTION f_prep_query (_tbl regclass, _prefix text)
  RETURNS void AS 
$func$
DECLARE
  _prep_qry text := (
     SELECT 'PREPARE stmt_dyn AS SELECT '
         || string_agg(quote_ident(attname), ',' ORDER BY attname)
         || ' FROM ' || _tbl
      FROM   pg_attribute
      WHERE  attrelid = _tbl
      AND    attname LIKE _prefix || '%'
      AND    attnum > 0
      AND    NOT attisdropped
     );
BEGIN
   EXECUTE _prep_qry;
EXCEPTION WHEN duplicate_prepared_statement THEN
   DEALLOCATE stmt_dyn;
   EXECUTE _prep_qry;
END
$func$  LANGUAGE plpgsql;

--调用:

BEGIN; -- optional
SELECT f_prep_query('dkj_p_k27ac'::regclass, 'enri'::text);
EXECUTE stmt_dyn;

我想请教以下问题: 我们从指定过程中获得的所需输出被输出到 DataOutput 中。 我想找到一种方法将数据存储到数据库中的新 table 中。

通常,如果您只想写入 table,请不要使用准备好的 SELECT 语句(或游标)。就此目的而言,效率非常低

直接写到 table,就像前面的回答中解释的那样:

完整的INSERT可以成为准备好的语句。但不是 CREATE TABLE ASPer documentation:

Any SELECT, INSERT, UPDATE, DELETE, or VALUES statement.