首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL:插入并获取新ID以便在LO-BASE中使用

PostgreSQL:插入并获取新ID以便在LO-BASE中使用
EN

Stack Overflow用户
提问于 2020-05-24 16:51:12
回答 3查看 63关注 0票数 2

我想在表中添加一行:

代码语言:javascript
复制
CREATE TABLE actors (
    id_act serial NOT NULL,
    first_name text NOT NULL,
    last_name text NOT NULL,
    CONSTRAINT actors_pkey PRIMARY KEY (id_act)
); 
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');

使用dBeaver,此语句提供新的ID:

代码语言:javascript
复制
select CurrVal(pg_get_serial_sequence('actors', 'id_act'));

使用LibreOffice-BASE时,我必须添加方案的名称,这会导致错误:列"scheme_name.table_name“不存在使用:"scheme_name.table_name”"scheme_name"."table_name“"table_name”

如何获取新的ID以供进一步使用(计算、检查等)?我不介意使用CurrVal或返回或其他东西。但是我找不到合适的语法。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2020-05-24 17:21:37

最简单的选择是在INSERT查询中使用RETURNING子句:

代码语言:javascript
复制
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks') 
RETURNING id_act;
票数 1
EN

Stack Overflow用户

发布于 2020-05-24 20:16:48

您可以在CTE中使用insert,然后返回值:

代码语言:javascript
复制
WITH i AS (
      INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks') 
          RETURNING id_act
     )
SELECT i.*
FROM i;

外部查询是一个SELECT,因此您的UI应该习惯于它返回值。

您甚至可以在该语句中继续处理--例如,通过添加更多CTEs -这样您就不需要实际获取值了。

票数 0
EN

Stack Overflow用户

发布于 2020-05-24 21:01:17

有三种方法可以为您提供新的id

  1. 使用序列和主键,postgres将自动插入唯一值

CREATE TABLE actors ( id_act序列主键first_name text NOT NULL,last_name text NOT NULL );

  • 如果您有序列,则可以在创建DDL时使用此序列,并且每次插入数据时,都会生成新的id

CREATE TABLE执行元( id_act integer NOT NULL DEFAULT nextval('sequence_name') first_name text NOT NULL,last_name text NOT NULL,CONSTRAINT actors_pkey PRIMARY KEY (id_act) );

  • 如果有序列,请在insert查询中使用序列

创建表执行元( id_act integer,first_name text NOT NULL,last_name text NOT NULL,CONSTRAINT actors_pkey PRIMARY KEY (id_act) );INSERT INTO TABLE (id_act,first_name,last_name)值(nextval('sequence_name'),'Tom','Hanks');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61983639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档