在postgres中选择/显示最后插入的序列ID

时间:2010-09-10 19:27:34

标签: sql sql-server postgresql

在sql server中我喜欢这个:

insert into foo(name) values('bob')
select @@identity;

所以我显示了查询/标量结果

如何使用postgres?

3 个答案:

答案 0 :(得分:23)

获取特定序列:

SELECT currval('name_of_your_sequence');

从最后使用的序列中获取最后一个值:

SELECT lastval();

也请查看手册:http://www.postgresql.org/docs/current/static/functions-sequence.html

编辑:您还可以在INSERT中使用RETURNING:

INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id;

答案 1 :(得分:3)

一个好方法是使用RETURNING id。以下是使用PL / pgSQL的简短示例:

        DECLARE
        nivel1 RECORD;
        resultId BIGINT;
        BEGIN
          FOR nivel1 IN SELECT * FROM primary_table LOOP
            INSERT INTO second_table(id, field2, field3) VALUES (DEFAULT, "value2", "value3") RETURNING id INTO resultId;
            RAISE NOTICE 'Inserted id: %s', quote_literal(resultId);
          END LOOP;
        RETURN;
        END

对我有用!

答案 2 :(得分:2)

这将是

获取诊断YourParam = RESULT_OID;

点击此处http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html向下滚动至37.6.6。获取结果状态

提问者编辑: 我试过这个:

create or replace function aaa() returns int as $$ 
declare 
a int;
begin
insert into oameni values(default, 'aaa');
get diagnostics a = result_oid;
return a;
end;
$$ language plpgsql;

它总是返回0,你知道这里有什么问题吗?