vendredi 1 février 2019

Postgresql offset - insert rows with ids into middle of table

Using Laravel 5.1 and PostgreSQL, by necessity, I need to insert rows in the middle of the table.

The ids are primary keys, but are not autoincremented. Instead, the ids are set in the loaded spreadsheet, which map to other values.

Before I insert, I was thinking I could pre-offset the ids then insert. The problem with this is, offsetting row id 2 to id 3 obviously will throw the following error because id 3 already exists:

duplicate key value violates unique constraint

Question: I'm looking to ignore the pkey constraint while I offset the IDs.

Update Query:

update table1 as t1
set id = id + 1
where id >= 2;

table1

id | str_a
----------
1    a
2    b
3    c

table1 Modified: first offset

id | str_a
----------
1    a
3    b <--- offset id by +1
4    c <--- offset id by +1

table1 Modified: Inserted {id: 2, str_a: 'hello world'}

id | str_a
----------
1    a
2    hello world <--- inserted
3    b
4    c

table1_table2

table1_id | table2_id
--------------------
1             1
2             2
3             3

table1_table2 Modified: After insert

table1_id | table2_id
--------------------
1             1
2             null            
3 <- offset   2 <- table2_id 2 now belongs to offset table1_id 3
4 <- offset   3 <- table2_id 3 now belongs to offset table1_id 4

table2

id | str_b
----------
1    d
2    e
3    f



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire