I have a function like
CREATE OR REPLACE FUNCTION testdb.upsert_course_details(studentdetails jsonb, studentresponse jsonb)
RETURNS jsonb
LANGUAGE sql
AS $function$
INSERT INTO testdb.test(
rollno,
course_name,
address
)
SELECT
(e ->> 'rollno')::integer,
e ->> 'course_name',
e ->> 'address'
FROM jsonb($1) e
ON CONFLICT
ON CONSTRAINT test_pkey
DO UPDATE
SET
rollno = EXCLUDED.rollno,
course_name = EXCLUDED.course_name,
address = EXCLUDED.address;
INSERT INTO testdb.test2(
course_id,
course_name,
rollno
)
SELECT
($2 ->> 'course_id')::integer,
$1 ->> 'course_name',
t.rollno
FROM testdb.test t
WHERE t.rollno = ($1 ->> 'rollno')::integer
ON CONFLICT
ON CONSTRAINT test2_pkey
DO UPDATE
SET
course_id = EXCLUDED.course_id,
course_name = EXCLUDED.course_name,
rollno = EXCLUDED.rollno;
SELECT
jsonb_build_object(
'course_name', ts.course_name,
'roll_no', ts.rollno,
'address', ts.address
)
FROM testdb.test ts
where ts.rollno = ($1->>'rollno')::integer;
$function$
;
i have tried
begin;
select plan(2);
select pass('ok');
SELECT results_eq($$ SELECT * FROM testdb.upsert_course_details('{"rollno":10, "course_name": "javascript", "address": "147 street"}'::jsonb, '{"course_id": 1015}'::jsonb) $$,
$$ VALUES ('{"address": "147 street"}'), ('{"roll_no": 10}'), ('{"course_name": "JAVASCRIPT"}') $$,
'Should get expected values'
);
select * from finish();
rollback;
but getting error while testing
not ok 2 - Should get expected values
# Failed test 2: "Should get expected values"
# Number of columns or their types differ between the queries:
# have: ("{""address"": ""147 street"", ""roll_no"": 10, ""course_name"": ""JAVASCRIPT""}")
# want: ("{""address"": ""147 street""}")