Postgres交叉表查询 - “重复类别”错误,其中2个值具有共同的前62个字符

时间:2016-06-07 03:15:51

标签: postgresql dynamic-sql crosstab

我是一个刚刚在postgres 9.5(动态)交叉表查询上工作的新手,一般都运行良好,但是我想出了一个特殊的问题,几乎有相同的类别名称,我希望有一个简单的解决方案/解释。

需要tablefunc:

CREATE EXTENSION IF NOT EXISTS tablefunc;

架构:

CREATE TABLE temp_table (id integer, name text, data text);
INSERT INTO temp_table VALUES (1, 'ThisSentenceIsExactlySixtyTwoCharactersLongPlusNumbersAtTheEnd',  'data1');
INSERT INTO temp_table VALUES (2, 'ThisSentenceIsExactlySixtyTwoCharactersLongPlusNumbersAtTheEnd1',  'data2');

查询:

SELECT * FROM CROSSTAB($$SELECT id, name, data FROM temp_table ORDER BY 1,2$$ , $$SELECT DISTINCT name FROM temp_table$$) AS ct (row integer, col_1 text,col_2 text);

而不是我期望的结果,我得到:

  

错误:重复的类别名称SQL状态:42710

任何人都可以告诉我这里发生了什么,如果有一个简单的解决方案? 谢谢!

1 个答案:

答案 0 :(得分:1)

我猜这与PostgreSQL将标识符(包括列名和类别名称)截断为63个字符这一事实有关。似乎在交叉表中的某处也可能出现一个错误。你的名字需要这么久吗?这可能是最容易解决的问题。你也可以尝试增加NAMEDATALEN并重新编译postgres。

https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS