func-rec-to-json.sql
813 Bytes
CREATE OR REPLACE FUNCTION rec_to_json(p_table_schema name, p_table_name name, p_rec record) RETURNS json LANGUAGE plpgsql AS $$
DECLARE
v_val text;
v_one json;
v_all json;
v_field record;
v_column text;
BEGIN
FOR v_field IN
SELECT column_name
FROM information_schema.columns
WHERE table_schema = p_table_schema
AND table_name = p_table_name
LOOP
v_column = v_field.column_name;
EXECUTE format('SELECT (($1).%I)::text', v_column)
USING p_rec
INTO v_val;
v_one = json_build_object(v_field.column_name, v_val);
IF v_all IS NULL THEN
v_all = v_one;
ELSE
v_all = v_all::jsonb || v_one::jsonb;
END IF;
END LOOP;
RETURN v_all;
END
$$