select/display last inserted serial id in postgres

后端 未结 3 1185
被撕碎了的回忆
被撕碎了的回忆 2021-02-09 06:21

in sql server I do like this:

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

so I get a query/scalar result displayed

how to

相关标签:
3条回答
  • 2021-02-09 07:05

    Get a specific sequence:

    SELECT currval('name_of_your_sequence');
    

    Get the last value from the last sequence used:

    SELECT lastval();
    

    Check the manual as well: http://www.postgresql.org/docs/current/static/functions-sequence.html

    Edit: You could also use RETURNING in your INSERT:

    INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id;
    
    0 讨论(0)
  • 2021-02-09 07:11

    It would be

    GET DIAGNOSTICS YourParam = RESULT_OID;

    See here http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html scroll down to 37.6.6. Obtaining the Result Status

    asker edit: I tried this:

    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;
    

    it always returns 0, you know what's wrong here?

    0 讨论(0)
  • 2021-02-09 07:13

    A good way is using RETURNING id. Here is a short example using 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
    

    It works for me!

    0 讨论(0)
提交回复
热议问题