postgresql – 无法在Postgres中使用交叉表
OSX 10.9.2上的Postgres 9.2.1.
如果我运行以下交叉表示例查询: CREATE EXTENSION tablefunc; CREATE TABLE ct(id SERIAL,rowid TEXT,attribute TEXT,value TEXT); INSERT INTO ct(rowid,attribute,value) VALUES('test1','att1','val1'); SELECT * FROM crosstab( 'select rowid,value from ct where attribute = ''att2'' or attribute = ''att3'' order by 1,2') AS ct(row_name text,category_1 text,category_2 text,category_3 text); 我得到:错误:扩展“tablefunc”已经存在 但是,如果我评论出CREATE EXTENSION 我得到:错误:函数交叉表(未知)不存在 我怎样才能摆脱这种恶性循环?这是一个已知的问题吗? 解决方法
你的回答有一种误解:
同一数据库中的所有模式都可以访问同一数据库中的所有会话(只要给出了权限).这是设置 或者,您可以对函数(甚至运算符)进行模式限定,以独立于search_path访问它: SELECT * FROM my_extension_schema.crosstab( $$select rowid,"value" from ct where attribute IN ('att2','att3') order by 1,2$$,$$VALUES ('att2'),('att3')$$ ) AS ct(row_name text,category_3 text); 最近的相关答案更多信息: 可疑的交叉表() 您的查询返回了属性’att2’和’att3′,但列定义列表有三个与查询不匹配的类别(category_1,category_2,category_3). 旁白:不要将值用作列名.即使Postgres容忍它.这是reserved word in standard SQL. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |