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
$$