Search code examples
postgresqlplpgsqlsql-insertsql-returningnextval

Get default serial value after INSERT inside PL/pgSQL


I have a table. I wrote a function in plpgsql that inserts a row into this table:

INSERT INTO simpleTalbe (name,money) values('momo',1000) ;

This table has serial field called id. I want in the function after I insert the row to know the id that the new row received.

I thought to use:

select nextval('serial');

before the insert, is there a better solution?


Solution

  • Use the RETURNING clause.
    And assign the result inside PL/pgSQL with an appended INTO.

    INSERT INTO simpleTalbe (name,money) values('momo',1000)
    RETURNING id
    INTO _my_id_variable;
    

    _my_id_variable must have been declared with a matching data type.

    Related:

    Depending on what you plan to do with it, there is often a better solution with pure SQL. Examples: