我想在表中添加一行:
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'));使用LibreOffice-BASE时,我必须添加方案的名称,这会导致错误:列"scheme_name.table_name“不存在使用:"scheme_name.table_name”"scheme_name"."table_name“"table_name”
如何获取新的ID以供进一步使用(计算、检查等)?我不介意使用CurrVal或返回或其他东西。但是我找不到合适的语法。
谢谢!
发布于 2020-05-24 17:21:37
最简单的选择是在INSERT查询中使用RETURNING子句:
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks')
RETURNING id_act;发布于 2020-05-24 20:16:48
您可以在CTE中使用insert,然后返回值:
WITH i AS (
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks')
RETURNING id_act
)
SELECT i.*
FROM i;外部查询是一个SELECT,因此您的UI应该习惯于它返回值。
您甚至可以在该语句中继续处理--例如,通过添加更多CTEs -这样您就不需要实际获取值了。
发布于 2020-05-24 21:01:17
有三种方法可以为您提供新的id
CREATE TABLE actors ( id_act序列主键first_name text NOT NULL,last_name text NOT NULL );
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) );
创建表执行元( 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');
https://stackoverflow.com/questions/61983639
复制相似问题