From f0838b28c08b1b09802cf053f6a74e9adc960d94 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Thu, 19 Oct 2017 11:22:03 -0400 Subject: [PATCH] retain the id number in the json rec, and order by id asc before inserting to trans. if mult records per key, this helps sort --- srce.pgsql | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/srce.pgsql b/srce.pgsql index d8edc0a..dfa1ae8 100644 --- a/srce.pgsql +++ b/srce.pgsql @@ -18,7 +18,7 @@ BEGIN --unwrap the schema definition array LEFT JOIN LATERAL jsonb_populate_recordset(null::tps.srce_defn_schema, defn->'schema') prs ON TRUE WHERE - srce = 'PNCC' + srce = 'PNCL' GROUP BY srce; @@ -35,7 +35,7 @@ BEGIN ----------------------------------------------------do the insert------------------------------------------------------------------------------------------- --the column list needs to be dynamic forcing this whole line to be dynamic - _t := format('COPY csv_i (%s) FROM ''C:\Users\ptrowbridge\downloads\transsearchcsv.csv'' WITH (HEADER TRUE,DELIMITER '','', FORMAT CSV, ENCODING ''SQL_ASCII'',QUOTE ''"'');',_c); + _t := format('COPY csv_i (%s) FROM ''C:\Users\ptrowbridge\downloads\llcol.csv'' WITH (HEADER TRUE,DELIMITER '','', FORMAT CSV, ENCODING ''SQL_ASCII'',QUOTE ''"'');',_c); --RAISE NOTICE '%', _t; @@ -55,21 +55,21 @@ WITH pending_list AS ( (ae.e::text[])[1], --the key name (row_to_json(i)::jsonb) #> ae.e::text[] --get the target value from the key from the csv row that has been converted to json ) json_key, - row_to_json(i)::JSONB - 'id' rec, + row_to_json(i)::JSONB rec, srce, --ae.rn, id FROM csv_i i INNER JOIN tps.srce s ON - s.srce = 'PNCC' + s.srce = 'PNCL' LEFT JOIN LATERAL JSONB_ARRAY_ELEMENTS_TEXT(defn->'unique_constraint'->'fields') WITH ORDINALITY ae(e, rn) ON TRUE GROUP BY i.*, srce, id ORDER BY - id + id ASC ) ------results of an insert operation-------------- , inserted AS ( @@ -85,6 +85,8 @@ WITH pending_list AS ( AND t.rec @> pl.json_key WHERE t IS NULL + ORDER BY + id ASC ----this conflict is only if an exact duplicate rec json happens, which will be rejected ----therefore, records may not be inserted due to ay matches with certain json fields, or if the entire json is a duplicate, reason is not specified RETURNING *