首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Postgresql中根据Serial主键自动填充列?

如何在Postgresql中根据Serial主键自动填充列?
EN

Stack Overflow用户
提问于 2019-08-08 23:44:57
回答 2查看 687关注 0票数 0

我有一个表,其中的列如下:

代码语言:javascript
复制
inner_id(serial pk) | id(varchar) | name(varchar) | fid(varchar) 

我想发送只有id和name的行:(id,name)我如何告诉Postgresql用基于串行主键(如字符串+主键)的值来完成'fid‘列?我想要这样的输出:

代码语言:javascript
复制
inner_id(serial pk) | id(varchar) | name(varchar) | fid(varchar)
         1               G786k          NAME           FID-1
         2               l7hk           NAME           FID-2

作为奖励,我从python发送行,并在查询中使用%s

UPD。我试着像这样运行查询:

代码语言:javascript
复制
INSERT INTO table (id, name, fid)
VALUES (%s,%s,%s||TO_CHAR(inner_id));

但是我得到一个错误,我不能引用inner_id(主键)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-08 23:54:12

由于您的inner_id是一个序列,因此您可以获取序列的名称并使用Nextval

所以它应该是这样的

代码语言:javascript
复制
INSERT INTO TABLE ("id","name","fid")
VALUES (your_id, 'some_name', 'FID-' || nextval('your_sequence_id') - 1);
票数 0
EN

Stack Overflow用户

发布于 2019-08-09 03:49:37

如果你将inner_id定义为'serial‘,Postgres将为它生成序列。通常类似于"table_name_column_name-seq“。然后,您可以使用该序列的当前值为"fid“列设置默认值。

代码语言:javascript
复制
create table soq.ref_to_id( inner_id serial, id text, name text, fid text);

alter table soq.ref_to_id alter column fid set default 'FID-' || currval('soq.ref_to_id_inner_id_seq')::text;

-- insert tast data    
insert into soq.ref_to_id(id, name)  
   values ('G786k', 'Gname')
        , ('17hk',  '17NAME');  

-- check results  
select * from soq.ref_to_id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57416352

复制
相关文章

相似问题

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