PostgreSQL只读权限下,如何优雅查询值为True的列名?
如何查询PostgreSQL中唯一为True的布尔列名(只读权限场景)
针对你描述的表结构和规则(3个布尔列仅一个为True或全为False),这里提供两种优雅的只读查询方案:
方案1:使用CASE表达式(直观简洁)
利用表的规则依次判断各列状态,直接返回匹配的列名:
SELECT CASE WHEN column_a THEN 'column_a' WHEN column_b THEN 'column_b' WHEN column_c THEN 'column_c' ELSE NULL -- 全为False时可替换为''或其他默认值 END AS true_column FROM "table" -- 注意table是PostgreSQL关键字,需加双引号 WHERE user_id = 'u2';
这个方案逻辑清晰,无需依赖额外函数,完全适配只读权限,执行效率也很高。
方案2:使用UNNEST+数组(扩展性更好)
如果后续可能新增布尔列,这个方案只需修改数组内容即可,无需调整判断逻辑:
SELECT col_name FROM ( SELECT user_id, UNNEST(ARRAY['column_a', 'column_b', 'column_c']) AS col_name, UNNEST(ARRAY[column_a, column_b, column_c]) AS col_value FROM "table" ) t WHERE user_id = 'u2' AND col_value = true;
当所有列都为False时,该查询会返回空结果集,你可以根据需求用COALESCE或LEFT JOIN调整为返回默认值。
内容的提问来源于stack exchange,提问作者nesiva
相关产品推荐
相关产品推荐

