我正在使用一个postgreSql查询,该查询用一些值填充一张表,并且在我运行时采用不同的参数。我每次使用不同的参数运行查询时都在追加行,现在,我有兴趣向所有作为一组参数输出的行提供一个自动生成的ID。这样我就可以访问属于某些参数。
有人可以帮助我如何每次使用一个唯一的ID列追加行吗?
答案 0 :(得分:0)
您可以使用RETURNING
语句获取返回ID
INSERT INTO Table1 (...) VALUES (...)
RETURNING idCol;
语法
RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
答案 1 :(得分:0)
您可以使用串行(对于bigint,则使用bigserial)作为列类型。
它们实际上是包装器,它们是自动将其默认值配置为临时nextval()的整数和biginteger类型的>序列,它也会在后台为您创建。
要添加这样的字段,您只需要执行以下这样的句子:
alter table your_table add column id serial primary key;
(将表名和列名调整为所需的名称)。
很显然,如果您尚未创建表,则只需在表声明中添加将其指定为
serial
的字段即可。但不要忘记也将其声明为primary key
,以确保将其视为此类。
这将创建并填充(由于其固有的默认值) id 列,并在单个事务中使用连续的数字。
请注意,根据表的大小,可能要花费大量时间。
此外,对于大型表,您可能需要考虑使用 bigserial 而不是 serial 。
关于将 id 分配给刚插入的行,可以在插入语句中添加returning id
子句,使其像选择一样返回行(或多行(如果使用单个语句插入多个行)(当然也可以使用returning *
或returning _whatever_columns_you_want_
。
答案 2 :(得分:0)
我听起来您想跟踪基于该参数的“ runid”。这将是一个单独的实体。我建议这样的数据结构:
create table runs (
runid serial primary key,
parameter varchar(255),
createdAt timestamp default current_timestamp
);
然后,您将在表中包括runid
,并用外键引用runs
。
最后,您可以通过执行以下操作将其插入表中:
with r as (
insert into runs (v_parameter)
values (parameter)
returning *
)
insert into yourtable ( . . . , runid)
select . . ., r.runid
from . . . cross join
r;