postgresql 返回多个插入的最后一个id

olhwl3o2  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(98)

在我的函数中我使用构造

insert into Table1(a, b, c) 
select a, b, c from Table2

我需要从这个函数调用到Table 1的最后插入行的id
从表1中选择max(id)的方法不正确。
在文档中我搜索了returning,但这不适用于多个插入。

do $$
declare _query int;
begin
    drop table if exists tTest;
    create temp table tTest (id serial primary key, name text);

    --work
    insert into tTest(name)
    values ('name') returning id into _query;

    --but when i use multiple insert - error
    insert into tTest(name)
    values ('name'), ('name1'), ('name2') returning id into _query;

RAISE NOTICE '%', _query;
end;
$$;

我尝试使用从插入创建数组,使用CTE,但这不工作。有没有办法得到最后的身份证?
我需要模拟scope_identity在t-sql。

eanckbw9

eanckbw91#

将CTE与MAX结合使用:

DO
$$
    DECLARE
        _id INT;
    BEGIN
        DROP TABLE IF EXISTS ttest;
        CREATE TEMP TABLE ttest
        (
            id   SERIAL PRIMARY KEY,
            name TEXT
        );

        --work
        INSERT INTO ttest(name)
        VALUES ('name')
        RETURNING id INTO _id;

        --Use a CTE and MAX to get the highest number:
        WITH i AS (
            INSERT INTO ttest (name)
                VALUES ('name'), ('name1'), ('name2')
                RETURNING id)
        SELECT MAX(id)
        FROM i
        INTO _id;

        RAISE NOTICE 'Last id: %', _id;
    END;
$$;

相关问题