From 07889591ab5cc247b0cd04fd8d87855ea118a51b Mon Sep 17 00:00:00 2001 From: Oscar Locatelli Date: Fri, 13 Jun 2025 17:18:48 +0200 Subject: [PATCH] Replaced the ON CONFLICT DO NOTHING logic with ON CONFLICT DO UPDATE to implement UPSERT Dynamically use of primary keys for conflict. Only in prepared statement code branch. --- lib/Ora2Pg.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Ora2Pg.pm b/lib/Ora2Pg.pm index fc8b7c67..eedfabf7 100644 --- a/lib/Ora2Pg.pm +++ b/lib/Ora2Pg.pm @@ -10872,7 +10872,10 @@ sub _dump_table $s_out =~ s/,$//; $s_out .= ")"; if ($self->{insert_on_conflict}) { - $s_out .= " ON CONFLICT DO NOTHING"; + # Use the primary key columns dynamically instead of hardcoding 'ida2a2' + my @pk_cols = @{ $self->{tables}{$table}{pg_colnames_pkey} }; + my @update_cols = grep { my $col = $_; !grep { $_ eq $col } @pk_cols } @{ $self->{tables}{$table}{dest_column_name} }; + $s_out .= " ON CONFLICT (" . join(',', @pk_cols) . ") DO UPDATE SET " . join(',', map { "$_ = EXCLUDED.$_" } @update_cols); } $sprep = $s_out; }