有没有一种方法可以安全地选择表中不存在的列,而不会出现“无效标识符”错误?也许返回 null 来代替?
类似这样的:
select
id,
non_existant_column as col_name -- return null here instead of rising an error
from table
我已经尝试了一些 SQL(coalesce、ifnull 等)和 dbt(dbt_utils.star、jinja 适配器)函数。
我希望看到一个简单的解决方案,如果列不存在,则在列值中返回 null。
这取决于您使用的数据库,但是:
在 PostgreSQL 中,您可以对数据库运行查询来检查您的架构。但是,A) 这必须在运行查询之前运行,B) 如果您需要架构灵活性,我建议使用不同的数据库引擎,例如 NoSQL 数据库 - 架构灵活性并不是关系数据库的确切用途。
获取架构信息:
SELECT column_name
FROM information_schema.columns
WHERE table_name='data_table'
使用架构信息的示例查询:
DO $$
DECLARE
column_exists BOOLEAN;
BEGIN
SELECT EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_name='data_table' AND column_name='value_column'
) INTO column_exists;
IF column_exists THEN
EXECUTE 'SELECT name, value_column FROM data_table';
ELSE
EXECUTE 'SELECT name, NULL::INT AS value_column FROM data_table';
END IF;
END $$;