Postgresql 在PL/pgSQL内部插入后获取默认序列值

Postgresql 在PL/pgSQL内部插入后获取默认序列值,postgresql,plpgsql,sql-insert,sql-returning,nextval,Postgresql,Plpgsql,Sql Insert,Sql Returning,Nextval,我有一张桌子。我在plpgsql中编写了一个函数,在该表中插入一行: INSERT INTO simpleTalbe (name,money) values('momo',1000) ; 此表具有名为id的serial字段。我想在插入行后在函数中知道新行收到的id 我想用: select nextval('serial'); 在插入之前,是否有更好的解决方案?使用该子句。您需要将结果保存在PL/pgSQL中的某个位置,并将附加到中 INSERT INTO simpleTalbe (name,

我有一张桌子。我在plpgsql中编写了一个函数,在该表中插入一行:

INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
此表具有名为
id
serial
字段。我想在插入行后在函数中知道新行收到的id

我想用:

select nextval('serial');
在插入之前,是否有更好的解决方案?

使用该子句。您需要将结果保存在PL/pgSQL中的某个位置,并将
附加到

INSERT INTO simpleTalbe (name,money) values('momo',1000)
RETURNING id
INTO _my_id_variable;
\u my\u id\u变量
必须使用匹配的数据类型声明

相关的:

根据您计划如何使用它,使用纯SQL通常会有更好的解决方案。示例:

    • 使用该子句。您需要将结果保存在PL/pgSQL中的某个位置,并将
      附加到

      INSERT INTO simpleTalbe (name,money) values('momo',1000)
      RETURNING id
      INTO _my_id_variable;
      
      \u my\u id\u变量
      必须使用匹配的数据类型声明

      相关的:

      根据您计划如何使用它,使用纯SQL通常会有更好的解决方案。示例:

      选择nextval(“串行”)不会做你想做的事
      nextval()。(另外,'serial'不是
      serial
      列使用的序列名称。)

      @Erwin的答案(
      INSERT…RETURNING
      )是最好的答案,因为语法是专门针对这种情况引入的,但是您也可以执行以下操作:

      SELECT currval('simpletalbe_id_seq') INTO ...
      
      插入后的任何时间,检索序列的当前值。(注意序列名称格式tablename_columnname_seq,用于支持
      serial
      列的自动定义序列)。

      选择nextval('serial')不会做你想做的事
      nextval()。(另外,'serial'不是
      serial
      列使用的序列名称。)

      @Erwin的答案(
      INSERT…RETURNING
      )是最好的答案,因为语法是专门针对这种情况引入的,但是您也可以执行以下操作:

      SELECT currval('simpletalbe_id_seq') INTO ...
      
      插入后的任何时间,检索序列的当前值。(注意序列名称格式tablename_columnname_seq,用于支持
      序列
      列的自动定义序列。)

      查看底部的
      插入返回
      查看底部的
      插入返回