我有下表:
CREATE TABLE problem (
id SERIAL,
title VARCHAR(50),
author VARCHAR(50),
path TEXT,
compiler VARCHAR(20),
PRIMARY KEY (id)
);
problem.id
是一个自动递增的整数。
有多种方法可以在不知道其值的情况下进行插入:
INSERT INTO problem VALUES (DEFAULT, 'Hello World', 'unknown', '/var/www/files/problems', 'Python');
INSERT INTO problem (title, author, path, compiler) VALUES ('Hello World', 'unknown', '/var/www/files/problems', 'Python');
但是,我想知道插入时的problem.id
,所以我可以将它附加到path
:
/var/www/files/problems/{id}
{id}
是插入的问题的problem.id
。
最佳答案
您可以使用 nextval
and lastval
的组合:
INSERT INTO problem VALUES (
nextval('problem_id_seq'),
'Hello World',
'unknown',
'/var/www/files/problems/' || lastval(),
'Python'
);
调用 nextval
正是 Postgres 用作 SERIAL
字段的默认值。因此可以在不显式调用 nextval
的情况下编写语句:
INSERT INTO problem VALUES (
DEFAULT,
'Hello World',
'unknown',
'/var/www/files/problems/' || lastval(),
'Python'
);
关于postgresql - 插入带有序列字段的表并使用其 future 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25445319/