From a0b31737412c0e2f3bf242b921966ffa3cf7b9c9 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Sat, 14 Oct 2017 01:40:26 -0400 Subject: [PATCH] add another variable to collect column list, add a serial column to temp, copy using column list, and then build json object based on json defn --- srce.pgsql | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/srce.pgsql b/srce.pgsql index 1bf3a42..39657aa 100644 --- a/srce.pgsql +++ b/srce.pgsql @@ -2,15 +2,18 @@ DO $$ declare _t text; +declare _c text; begin ----------------------------------------------------build the column list of the temp table---------------------------------------------------------------- SELECT - string_agg(quote_ident(prs.key)||' '||prs.type,',') + string_agg(quote_ident(prs.key)||' '||prs.type,','), + string_agg(quote_ident(prs.key),',') INTO - _t + _t, + _c FROM TPS.srce --unwrap the schema definition array @@ -24,6 +27,7 @@ begin _t := format('CREATE TEMP TABLE csv_i (%s)', _t); raise notice '%', _t; + raise notice '%', _c; ----------------------------------------------------build the table----------------------------------------------------------------------------------------- @@ -32,15 +36,29 @@ begin EXECUTE _t; - COPY csv_i FROM 'C:\Users\fleet\downloads\dc.csv' WITH (HEADER TRUE,DELIMITER ',', FORMAT CSV, ENCODING 'SQL_ASCII',QUOTE '"'); + ALTER TABLE csv_i ADD COLUMN id SERIAL; + + --the column list needs to be dynamic forcing this whole line to be dynamic + COPY csv_i ("Trans. Date","Post Date","Description","Amount","Category")FROM 'C:\Users\fleet\downloads\dc.csv' WITH (HEADER TRUE,DELIMITER ',', FORMAT CSV, ENCODING 'SQL_ASCII',QUOTE '"'); end $$; -SELECT * FROM csv_i; - +--SELECT * FROM csv_i; +SELECT + jsonb_build_object( + (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, + srce, + ae.rn +FROM + csv_i i + INNER JOIN tps.srce s ON + s.srce = 'DCARD' + LEFT JOIN LATERAL JSONB_ARRAY_ELEMENTS_TEXT(defn->'unique_constraint'->'fields') WITH ORDINALITY ae(e, rn) ON TRUE; /* INSERT INTO