首页 > 解决方案 > PostgreSQL,允许过滤不存在​​的字段

问题描述

我正在使用带有 Go 驱动程序的 PostgreSQL。有时我需要查询不存在的字段,只是为了检查 - 也许数据库中存在某些东西。在查询之前,我无法判断该字段是否存在。例子:

where size=10 or length=10

默认情况下,我得到一个错误column "length" does not exist,但是,该size列可能存在并且我可以获得一些结果。

是否可以处理此类情况以返回可能的情况?


编辑:

是的,我可以先得到所有现有的列。但最初的查询可能相当复杂,不是我直接创建的,我只能修改它们。

这意味着查询可以像前面的示例一样简单,也可以像这样复杂得多:

WHERE size=10 OR (length=10 AND n='example') OR (c BETWEEN 1 and 5 AND p='Mars')

如果缺少的列是length并且c- 这是否意味着我必须解析 SQL,将其拆分OR(或其他运算符),检查查询的每个部分,然后删除缺少列的任何部分 - 最后生成一个新的 SQL 查询?

有更简单的方法吗?

标签: postgresqlgo

解决方案


没有办法做你想做的事,除了从可用列的列表中构造一个 SQL 字符串,可以通过查询information_schema.columns.

SQL 语句在执行之前先解析,没有条件编译或短路,因此如果引用了不存在的列,则会出错。


推荐阅读