我是一个刚刚在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
任何人都可以告诉我这里发生了什么,如果有一个简单的解决方案? 谢谢!
答案 0 :(得分:1)
我猜这与PostgreSQL将标识符(包括列名和类别名称)截断为63个字符这一事实有关。似乎在交叉表中的某处也可能出现一个错误。你的名字需要这么久吗?这可能是最容易解决的问题。你也可以尝试增加NAMEDATALEN并重新编译postgres。
https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS