Sql 如何使用nextval()在字符串中插入包含自己ID的行

Sql 如何使用nextval()在字符串中插入包含自己ID的行,sql,postgresql,sql-insert,auto-increment,create-table,Sql,Postgresql,Sql Insert,Auto Increment,Create Table,我有一个表,其中包含一个列,该列的字符串包含它自己的ID。 如何使用单个SQL语句插入新行 id| URL --|---------------------- 1|"http://example.com/1" 2|"http://example.com/2" 3|"http://example.com/3" 我需要像这样的东西 NEXT_ID=SELECT nextval('table_name_ID_seq'); 在表中插入\

我有一个表,其中包含一个列,该列的字符串包含它自己的ID。 如何使用单个SQL语句插入新行

id| URL
--|----------------------
 1|"http://example.com/1"
 2|"http://example.com/2"
 3|"http://example.com/3"
我需要像这样的东西

NEXT_ID=SELECT nextval('table_name_ID_seq');
在表中插入\u name(id,name)值(下一个\u id,'http://example.com/“+NEXT_ID)返回*

一个选项是首先选择子查询中的下一个序列:

insert into test(id, url)
select id, 'http://example.com/' || id::text
from (select nextval('test_id_seq') as id) x;

您也可以使用计算列,这样可以更清晰地插入代码:

create table test(
  id SERIAL,
  url text,
  new_url text generated always as (url || id::text) stored
);

insert into test(url) values ('http://example.com/');
给你:

| id  | url                 | new_url              |
| --- | ------------------- | -------------------- |
| 1   | http://example.com/ | http://example.com/1 |

我无法添加计算列,因为该表包含多态数据,因此对其他记录没有意义(@Vitim.us:好的,那么你想在我的答案中使用第一个查询。谢谢,我不知道这是两种不同的方法。你也可以使用CTE,并将下一次呼叫放入WITH子句中;这基本上只是@GMB最初建议将其放入from中的一个变体,所以只需在此处提及它,而不是将其作为不同的查询提交回答。@xzilla plz将您的评论作为答案,并举例说明