RE: Error when using unquoted identifier that contains the word end in a begin atomic block - Mailing list pgsql-bugs

From Jonathan Zacharuk
Subject RE: Error when using unquoted identifier that contains the word end in a begin atomic block
Date
Msg-id YT2PR01MB431868625CDBA6086F22A0359C1DA@YT2PR01MB4318.CANPRD01.PROD.OUTLOOK.COM
Whole thread Raw
In response to Re: Error when using unquoted identifier that contains the word end in a begin atomic block  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
Thanks Tom. I should have noticed that the command I was running was not completely getting sent to the server. This
doesindeed look like a Navicat issue. I have confirmed with psql that this works fine and will ensure to do so in the
future!

-----Original Message-----
From: Tom Lane <tgl@sss.pgh.pa.us>
Sent: Thursday, August 24, 2023 1:12 PM
To: Jonathan Zacharuk <jonathan.zacharuk@ascentech.ca>
Cc: pgsql-bugs@lists.postgresql.org
Subject: Re: Error when using unquoted identifier that contains the word end in a begin atomic block

Jonathan Zacharuk <jonathan.zacharuk@ascentech.ca> writes:
> It seems to me that within a BEGIN ATOMIC block the use of the word "end" within an unquoted identifier is causing an
error.

I think your problem is somewhere on the client side.

> -- This function is successfully created (note the quoted "effective_end_date").
> CREATE OR REPLACE FUNCTION test_function_success() RETURNS TIMESTAMP
> LANGUAGE SQL BEGIN ATOMIC
>   SELECT DISTINCT "effective_end_date"
>                 FROM test_view;
> END

For me, this works (in psql) with or without the double quotes:

regression=# CREATE OR REPLACE FUNCTION test_function_success() RETURNS TIMESTAMP LANGUAGE SQL BEGIN ATOMIC
  SELECT DISTINCT "effective_end_date"
                FROM test_view;
END;
CREATE FUNCTION
regression=# CREATE OR REPLACE FUNCTION test_function_success() RETURNS TIMESTAMP LANGUAGE SQL BEGIN ATOMIC
  SELECT DISTINCT effective_end_date
                FROM test_view;
END;
CREATE FUNCTION

> -- This function fails to be created. I would expect this to work.
> CREATE OR REPLACE FUNCTION test_function_fail() RETURNS TIMESTAMP
> LANGUAGE SQL BEGIN ATOMIC
>   SELECT DISTINCT effective_end_date
>                 FROM test_view
> ERROR:  syntax error at end of input
> LINE 6:  FROM test_view
>                        ^

I can't help noticing that the trailing END is missing from what you show here, and it seems pretty clear that the
syntaxerror is about that, not about the effective_end_date identifier.  So the real question is why the CREATE
FUNCTIONcommand is getting sent to the server before it's complete.  If this isn't flat-out pilot error, then I guess
whateverclient you are using (apparently not psql) is getting confused about which occurrence of "end" terminates the
command. You should take this up with the authors of said client software. 

            regards, tom lane



pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: Error when using unquoted identifier that contains the word end in a begin atomic block
Next
From: Ghw
Date:
Subject: Re: BUG #18068: Insufficient permission unless SUPERUSER