函数交叉表(未知,未知)不存在但存在

问题描述 投票:0回答:2

我有一个交叉表函数,我过去曾多次成功使用过,但现在它在最后转储所有数据,而不是将其转储到输出表中。似乎找不到交叉表。我做了以下研究;

  • 如果tablefunc不存在则创建扩展; --- 答案是:扩展名“tablefunc”已经存在
  • 使用模式动物创建扩展 tablefunc;答案是:如上所述
  • 从 information_schema.routines 中选择 count(*),其中routine_name like 'crosstab%'; ---- 答案是 6。

以下是一段功能代码: 开始 str := '" " 文本,'; -- A1 单元格中的空白

FOR REC IN SELECT DISTINCT col_name 来自 an_in_tbl 按列名排序 环形 字符串 := 字符串 || '"' || rec.col_name || '" 文本' ||','; 结束循环;

str:= substring(str, 0, length(str));

EXECUTE 'CREATE EXTENSION IF NOT EXISTS tablefunc;
DROP TABLE IF EXISTS an_out_tbl;
CREATE TABLE an_out_tbl AS
SELECT *
FROM crosstab(''select row_name, col_name, row_value from an_in_tbl order by 1'',   
             ''SELECT DISTINCT col_name FROM an_in_tbl ORDER BY 1'')
     AS final_result ('|| str ||')';

选择animal_pivot_fn()

注意:扩展名“tablefunc”已经存在,跳过 注意:表“an_out_tbl”不存在,跳过 错误:函数交叉表(未知,未知)不存在 第 5 行:FROM crosstab('从...中选择 row_name, col_name, row_value ^ 提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。 查询:如果不存在则创建扩展 tablefunc; 如果存在则删除表 an_out_tbl; 创建表 an_out_tbl AS 选择 * FROM crosstab('从 an_in_tbl 中按 1 顺序选择 row_name, col_name, row_value',
'从 an_in_tbl ORDER BY 1 中选择不同的 col_name') AS Final_result (" " 文本、"猫" 文本、"狗" 文本、"蛇" 文本、"马" 文本、"大象" 文本、"鼠标" 文本、"猴子"... 还有更多... 这里是转储数据并且不创建数据透视表的地方。

postgresql pivot crosstab
2个回答
11
投票

需要运行以下查询

运行

\dx
命令.

如果结果如下需要运行以下查询

 CREATE EXTENSION tablefunc;

再次运行

\dx
命令,结果应该如下所示。

现在您可以运行交叉表查询,应该可以解决。


0
投票

您是否可以在

不同的模式
中安装tablefunc扩展?

这就是发生在我身上的事情。我错误地将它安装在我的 sched 架构中

    SELECT 
        extname                 AS extname 
    ,   nspname                 AS schema 
    ,   extowner::regrole::text AS owner
    FROM pg_extension 
    INNER JOIN pg_namespace ON pg_namespace.oid = pg_extension.extnamespace
    WHERE extname = 'tablefunc';

我运行了上面的以下查询来查找它所在的模式。然后,我通过生产代码进行更改,并添加前缀交叉表,在我的例子中变成

sched.crosstab($$query 1$$,$$query 2$$)

© www.soinside.com 2019 - 2024. All rights reserved.