0

I am getting a very small but irritating error while creating a Postgres function.

The function get executed when my language is sql but throws a syntax error

syntax error at or near "Select" LINE 14: Select * from x*

when I change the language to plpgsql, as I need to use control statements I need my language to be plpgsql not sql.

Here is the function defination

-- FUNCTION: public."HHMD"()

   DROP FUNCTION public."HHMD"();

   CREATE OR REPLACE FUNCTION public."HHMD"(
        )
       RETURNS TABLE(changesets character varying)
       LANGUAGE 'plpgsql'
       COST 100
       VOLATILE 
       ROWS 1000
   AS $BODY$

   Select * from x

   $BODY$;

   ALTER FUNCTION public."HHMD"()
       OWNER TO lke_new;

   COMMENT ON FUNCTION public."HHMD"()
       IS 'work!';

1 Answer 1

1

As documented in the manual a PL/pgSQL function needs (at least) a BEGIN and END block.

To return the result of a query from within a PL/pgSQL function, you need to use return query

So your function should look like this:

CREATE OR REPLACE FUNCTION public."HHMD"()
   RETURNS TABLE(changesets character varying)
   LANGUAGE plpgsql
   COST 100
   VOLATILE 
   ROWS 1000
AS $BODY$
BEGIN --<< this is missing

   -- return the result of a query
  return query
    Select * from x;

END; --<< the corresponding END for the BEGIN
$BODY$;

Unrelated, but:

The language name is an identifier, you should not put it in single quotes. Use language sql or language plpgsql instead.

Sign up to request clarification or add additional context in comments.

1 Comment

Single quotes was generated by the NEW FUNCTION UI in pgadmin4

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.