首页 > 解决方案 > 作为惰性规则视图的一部分插入多个表时如何返回

问题描述

我正在尝试为我的视图创建规则,这样我就不必一次插入多个表,但我需要返回新行并且我无法工作如何从多个插入语句返回。

此规则工作正常,但显然什么也不返回:

create rule template_field_insert as on insert to template_field 
do instead (
    insert into public.base (
        id,
        organisation_id,
        last_modified_by,
        armicus_data
    )
    values (
        new.id,
        new.organisation_id,
        new.last_modified_by,
        new.armicus_data
    )
    insert into public.template_field_data (
        id,
        template_id,
        format_id,
        armicus_name,
        description,
        armicus_configuration,
        required
    )
    values (
        new.id,
        new.template_id,
        new.format_id,
        new.armicus_name,
        new.description,
        new.armicus_configuration,
        new.required
    )
) 

我试过这个,但它只是在第一次插入时抛出一个语法错误:

create rule template_field_insert as on insert to template_field 
do instead (
    (
        insert into public.base (
            id,
            organisation_id,
            last_modified_by,
            armicus_data
        )
        values (
            new.id,
            new.organisation_id,
            new.last_modified_by,
            new.armicus_data
        )
        returning *
    ) b, (
        insert into public.template_field_data (
            id,
            template_id,
            format_id,
            armicus_name,
            description,
            armicus_configuration,
            required
        )
        values (
            new.id,
            new.template_id,
            new.format_id,
            new.armicus_name,
            new.description,
            new.armicus_configuration,
            new.required
        )
        returning *
    ) f
    select b.id, f.armicus_name
    from b
    join f on b.id = f.id
)

我已经通过视图之外的 CTE 实现了这一点,但您不能在 CTE 内使用 NEW。

标签: sqlpostgresql

解决方案



推荐阅读