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
我是一个从事 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