postgreSQL: how to duplicate a row

前端 未结 2 907
离开以前
离开以前 2020-12-28 12:30

This is the scheme of my table web_book:

     Column     |          Type          |                       Modifiers                       
----------------+-         


        
相关标签:
2条回答
  • 2020-12-28 12:44

    Specify id column only if you specify its value (and it's not your case). You want to use next sequence web_book_id_seq value, so do not specify it in your INSERT query.

    Your INSERT should looks like this:

    INSERT INTO web_book (page_count, year_published, file, image, display_on_hp, name, description, name_cs, name_en, description_cs, description_en)
    SELECT page_count, year_published, file, image, display_on_hp, name, description, name_cs, name_en, description_cs, description_en
    FROM web_book
    WHERE id = 3;
    
    0 讨论(0)
  • 2020-12-28 12:50

    You need to create a new ID for the newly inserted row:

    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'), 
           page_count, 
           year_published, 
           file, 
           image, 
           display_on_hp, 
           name, 
           description, 
           name_cs, 
           name_en, 
           description_cs, 
           description_en 
    FROM web_book WHERE id=3;
    

    As mentioned by ClodoaldoNeto you can make things a bit easier by simply leaving out the ID column and let the default definition do its job:

    INSERT INTO web_book( 
       page_count, year_published, file, image, 
       display_on_hp, name, description, name_cs, 
       name_en, description_cs, description_en
    )
    SELECT page_count, 
           year_published, 
           file, 
           image, 
           display_on_hp, 
           name, 
           description, 
           name_cs, 
           name_en, 
           description_cs, 
           description_en 
    FROM web_book WHERE id=3;
    

    In this case you don't need to know the sequence name (but it is a bit less obvious what's going on).

    0 讨论(0)
提交回复
热议问题