安全选择 SQL(或 dbt)中不存在的列

问题描述 投票:0回答:1

有没有一种方法可以安全地选择表中不存在的列,而不会出现“无效标识符”错误?也许返回 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。

sql postgresql dbt
1个回答
0
投票

这取决于您使用的数据库,但是:

在 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 $$;
© www.soinside.com 2019 - 2024. All rights reserved.