postgreSQL:如何复制一行

前端之家收集整理的这篇文章主要介绍了postgreSQL:如何复制一行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的表web_book的方案:
Column     |          Type          |                       Modifiers                       
----------------+------------------------+-------------------------------------------------------
 id             | integer                | not null default nextval('web_book_id_seq'::regclass)
 page_count     | integer                | not null
 year_published | integer                | not null
 file           | character varying(100) | not null
 image          | character varying(100) | not null
 display_on_hp  | boolean                | not null
 name           | character varying(128) | not null
 description    | text                   | not null
 name_cs        | character varying(128) | 
 name_en        | character varying(128) | 
 description_cs | text                   | 
 description_en | text                   |

该表包含id = 3的一行。我想复制行,但如果我尝试这样:

INSERT INTO web_book SELECT * FROM web_book WHERE id=3;

我得到这个:

ERROR:  duplicate key value violates unique constraint "web_book_pkey"
DETAIL:  Key (id)=(3) already exists
您需要为新插入的行创建一个新的ID:
INSERT INTO web_book( 
   id,page_count,year_published,file,image,display_on_hp,name,description,name_cs,name_en,description_cs,description_en
)
SELECT nextval('web_book_id_seq'),description_en 
FROM web_book WHERE id=3;

如ClodoaldoNeto所提到的,您可以通过简单地省略ID列,让默认定义做到这一点,使事情变得更简单:

INSERT INTO web_book( 
   page_count,description_en
)
SELECT page_count,description_en 
FROM web_book WHERE id=3;

在这种情况下,您不需要知道序列名称(但是这不清楚)。

猜你在找的Postgre SQL相关文章