Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:插入并获取新ID,以便在LO-BASE中使用_Sql_Postgresql_Select_Sql Insert_Libreoffice Base - Fatal编程技术网

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

PostgreSQL:插入并获取新ID,以便在LO-BASE中使用,sql,postgresql,select,sql-insert,libreoffice-base,Sql,Postgresql,Select,Sql Insert,Libreoffice Base,我想在表中添加一行: 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

我想在表中添加一行:

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:

select CurrVal(pg_get_serial_sequence('actors', 'id_act'));
对于libreofficebase,我必须添加方案的名称,这将导致 错误:列方案\u名称。表\u名称不存在 我在使用以下命令时遇到了相同的错误: 方案\名称。表\名称 方案\名称。表\名称 表名称

如何获取新ID以进行进一步的使用率计算、检查。。。?我不介意使用CurrVal或RETURNING或其他方式。但是我找不到正确的语法


谢谢大家!

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

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

WITH i AS (
      INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks') 
          RETURNING id_act
     )
SELECT i.*
FROM i;
外部查询是一个SELECT,因此您的UI应该对它返回值感到满意


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

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

使用串行和主键,postgres将自动插入一个唯一的值

   CREATE TABLE actors (
     id_act SERIAL PRIMARY KEY
     first_name text NOT NULL,
     last_name text NOT NULL
   ); 
如果您有序列,您可以在创建DDL时使用此序列,并且每次插入数据时, 将生成新的id

 CREATE TABLE actors (
   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查询中使用序列

  CREATE TABLE actors (
    id_act integer,
    first_name text NOT NULL,
    last_name text NOT NULL,
    CONSTRAINT actors_pkey PRIMARY KEY (id_act)
  ); 


INSERT INTO actors (id_act, first_name, last_name) VALUES (nextval('sequence_name'), 'Tom', 'Hanks');

尝试了此操作,但BASE返回错误:Type:com.sun.star.sdbc.SQLException消息:SQL代码提供了结果,但预期没有结果。找到一个类似的示例[link],上一章获取最后一个插入id:*我需要从那里获取storgae其他地方的8,@StOMicha:我不知道BASE,但您可能需要将执行查询的方法更改为允许返回值的方法。
  CREATE TABLE actors (
    id_act integer,
    first_name text NOT NULL,
    last_name text NOT NULL,
    CONSTRAINT actors_pkey PRIMARY KEY (id_act)
  ); 


INSERT INTO actors (id_act, first_name, last_name) VALUES (nextval('sequence_name'), 'Tom', 'Hanks');