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
You can change the first line into:
CREATE EXTENSION IF NOT EXISTS tablefunc;
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?
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.
the problem in my case was that the 'tablefunc' extension was defined on one specific schema in my DB, and not accessible to all schemas in it.
[edit: as explained above, 'not accessible to all schemas' should read 'cannot be loaded on all schemas']
I learned that:
\df *.crosstab
[edit: 4. you can access the extension either by search_path, by loading it on public schema or by explicitly specifying a schema]