Postgres 交叉表查询 - "duplicate category" 错误,其中 2 个值的前 62 个字符相同

Postgres Crosstab query - "duplicate category" error where 2 values have the first 62 characters in common

我是一个从事 postgres 9.5(动态)交叉表查询的新手,一般情况下工作正常,但我遇到了一个奇怪的问题,类别名称几乎相同,我希望有一个简单 solution/explanation.

需要 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);

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

ERROR: duplicate category name SQL state: 42710

谁能告诉我这是怎么回事,是否有简单的解决方法? 谢谢!

我猜这与 PostgreSQL 将标识符(包括列名和类别名)截断为 63 个字符有关。似乎交叉表中的某处也可能存在一个差一错误。你的名字需要这么长吗?这可能是最简单的修复方法。您也可以尝试增加 NAMEDATALEN 并重新编译 postgres。

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