首页 > 解决方案 > 如何使用 nextval() 在字符串中插入包含自己 ID 的行

问题描述

我有一个表,其中包含一个包含其自己 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');
insert into table_name (id, name) values (NEXT_ID, 'http://example.com/' + NEXT_ID) returning *

https://www.db-fiddle.com/f/3NwLNBirN7mHKpDk9NyHSy/1

标签: sqlpostgresqlsql-insertauto-incrementcreate-table

解决方案


一种选择是首先在子查询中选择下一个序列:

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 |

推荐阅读