Unable to use crosstab in Postgres

后端 未结 3 746
北荒
北荒 2021-02-14 01:16

Postgres 9.2.1 on OSX 10.9.2.

If I run the following crosstab example query:

CREATE EXTENSION tablefunc; 

CREATE TABLE ct(id SERIAL, rowid TEXT, attribu         


        
3条回答
  •  梦谈多话
    2021-02-14 01:55

    There's a misconception in your answer:

    and not accessible to all schemas in it.

    All schemas inside the same database are accessible to all sessions in that same database, (as long as privileges are given). It's a matter of setting the search_path. Schemas work much like directories / folders in the file system.

    Alternatively, you can schema-qualify the function (and even operators) to access it independently of the search_path:

    SELECT *
    FROM my_extension_schema.crosstab(
        $$select rowid, attribute, "value"
          from   ct
          where  attribute IN ('att2', 'att3')
          order  by 1,2$$
       ,$$VALUES ('att2'), ('att3')$$
       ) AS ct(row_name text, category_2 text, category_3 text);

    Recent related answer with more Info:
    How to use % operator from the extension pg_trgm?

    Dubious crosstab()

    Your query returned attributes 'att2' and 'att3', but the column definition list had three categories (category_1, category_2, category_3) that do not match the query.
    I removed category_1 and added the second parameter to crosstab() - the "safe" version. More details here:
    PostgreSQL Crosstab Query

    Aside: Don't use value as column name. Even if Postgres tolerates it. It's a reserved word in standard SQL.

提交回复
热议问题