微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Postgresql 9.2 错误,分组依据未出现在 postgresql 12

如何解决Postgresql 9.2 错误,分组依据未出现在 postgresql 12

我有一个带有“GROUP BY”的 postgresql 函数,它在我的本地服务器上运行良好(postgresql 版本是 12.6)但是得到了著名的错误“列“f.fa_docnum”必须出现在 GROUP BY 子句中或用于运行 postgresql 9.2.24 的 Web 服务器上的聚合函数。我对此完全感到困惑。两个版本的文档对于 GROUP BY 子句完全相同。

这是函数(比原来的简单一点,但得到的结果相同):

SELECT 
            f.fa_docnum,f.fa_date,sum(l.lj_credit),sum(l.lj_debit)
            FROM livrejournal l,document d,facture_achat f
            WHERE d.doc_id = l.lj_docid 
            AND d.doc_fa_docnum = f.fa_docnum
            AND f.fa_fournisseur = 59               
            GROUP BY (f.fa_docnum,f.fa_date);

在 9.2 版本的生产站点上,如果我删除 GROUP BY 子句中的“f.fa_date”列,我不会收到任何错误,而在 12.6(以及以前的较低版本)的本地开发站点上,我不会收到任何错误案件。 如果有人对这种奇怪的行为有任何想法,或者一些提示解决方法,我将不胜感激。

解决方法

由于列周围的括号,您只能按单个列进行分组。表达式 (f.fa_docnum,f.fa_date) 是一个列,具有包含两个字段的匿名记录类型。

似乎 Postgres 9.2 无法检测到记录表达式的字段之一是表的主键,从而引发错误。虽然 Postgres 12 可以检测到记录的字段之一是表的主键列。

解决方案是删除列周围的括号。他们从一开始就没有任何目的,实际上在您的情况下是错误的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。