我有一个交叉表函数,我过去曾多次成功使用过,但现在它在最后转储所有数据,而不是将其转储到输出表中。似乎找不到交叉表。我做了以下研究;
以下是一段功能代码: 开始 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 (" " 文本、"猫" 文本、"狗" 文本、"蛇" 文本、"马" 文本、"大象" 文本、"鼠标" 文本、"猴子"... 还有更多... 这里是转储数据并且不创建数据透视表的地方。
您是否可以在
不同的模式中安装
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$$)
。