Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Postgres syntax error at or near "IF"

I am new to postgres and I am working on an assignment of mine. I had to create a table with only 1 column and, then I was given this statement to run in on pgadmin III:

BEGIN; INSERT INTO mytable VALUES (1); SAVEPOINT savepoint1; INSERT INTO mytable VALUES (2); ROLLBACK TO SAVEPOINT savepoint1; INSERT INTO mytable VALUES (3); SAVEPOINT savepoint2; INSERT INTO mytable VALUES (4); INSERT INTO mytable VALUES (5); SAVEPOINT savepoint3; SELECT * FROM mytable; --NOTE: You need to run this IF statement as PGScript  --(button next to the normal run button) IF (CAST ((SELECT MAX(id) FROM mytable) AS INTEGER) = 4) BEGIN       RELEASE SAVEPOINT savepoint2; END ELSE BEGIN       INSERT INTO mytable VALUES(6); END --Run the next steps normally SAVEPOINT savepoint2; INSERT INTO mytable VALUES (7); RELEASE SAVEPOINT savepoint2; INSERT INTO mytable VALUES (8); ROLLBACK TO savepoint2; COMMIT; 

when I run this I get this error: syntax error at or near "IF"

I have already take a look at this 38.6.2. Conditionals38.6.2. Conditionals , I dont understand this very well, Do I need to change the query to have

IF (CAST ((SELECT MAX(id) FROM mytable) AS INTEGER) = 4) THEN  BEGiN  

and then when it ends I should end it with:

END IF 

Why there is an error after all??

like image 977
S. N Avatar asked Jan 06 '14 19:01

S. N


1 Answers

IF and other PL/pgSQL features are only available inside PL/pgSQL functions. You need to wrap your code in a function if you want to use IF. If you're using 9.0+ then you can do use DO to write an inline function:

do $$ begin   -- code goes here end $$ 

If you're using an earlier version of PostgreSQL then you'll have to write a named function which contains your code and then execute that function.

like image 87
mu is too short Avatar answered Oct 03 '22 09:10

mu is too short