openGauss6.1极简版报错,情景:在从mysql迁移到opengauss时候,开启mysql的兼容模式,使用sql语句时候发现报错:column “xxxx” must appear in the GROUP BY clause or be used in an aggregate function。
通常在mysql下解决该办法是通过修改sql_mode中的only_full_group_by
通过踩坑以及查阅资料后在opengauss下解决办法为:将gauss数据库里面的sql_mode中的sql_mode_full_group参数取消即可
1.登录数据库使用语句show dolphin.sql_mode;后可以查询得出默认值为:sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date,pad_char_to_full_length
sql_mode_full_group:
- 出现在select列表中的列(不使用聚合函数),是否一定要出现在group by子句中。当处在sql_mode_full_group模式(默认模式)下,如果select列表中的列没有使用聚合函数,也没有出现在group by子句,那么会报错,如果不在此模式下,则会执行成功,并在所有符合条件的元组中选取第一个元组。
- 出现在order by中的列,是否一定要出现在distinct中(注意是distinct,不是distinct on)。当处在sql_mode_full_group模式(默认模式)下,不允许没有出现在distinct中的列出现在order by子句中,否则允许。
因此需要将sql_mode_full_group去掉即可。
通过查阅资料为在postgresql.conf中设置 dolphin.sql_mode=‘sql_mode_strict,pipes_as_concat,no_zero_date,pad_char_to_full_length’ 然后重启数据库即可。
注:1.必须在配置文件中设置,若在数据库中设置set dolphin.sql_mode to ‘sql_mode_strict,pipes_as_concat,no_zero_date,pad_char_to_full_length’;也仅仅是当前的会话生效,不是全局生效。
2. sql_mode虽然可以查询得出类似的配置,但是在gauss中使用的是dolphin.sql_mode参数
修改示例:

参考资料:https://www.modb.pro/db/1728339983801606144




