I need to reset a sequence value in PostgreSQL. If the sequence value is lesser than MAX value of a Sequence column then the sequence value has to be reset.
I tried with below code using dynamic query:
CREATE OR REPLACE FUNCTION fn_test (
schemaName VARCHAR
, tableName VARCHAR
, sequenceColumn VARCHAR
, sequenceName VARCHAR
, OUT result int
) AS
$func$
DECLARE
BEGIN
EXECUTE 'IF EXISTS (
SELECT NULL
FROM pg_catalog.pg_sequences
WHERE sequencename = '''||sequenceName||'''
and last_value <> (
Select MAX('||sequenceColumn||')
FROM ' ||schemaName||'.'||tableName||'
)
THEN
SELECT setval(
'''||schemaName||'.'||sequenceName||'''
,(
SELECT MAX('||sequenceColumn||')
FROM ' ||schemaName||'.'||tableName||'
)
)
'
INTO result;
--END IF
END
$func$ LANGUAGE plpgsql
IMMUTABLE SECURITY DEFINER;
--function call
SELECT fn_test (
schemaName => 'schemaName',tableName =>'NameOfTable',sequenceColumn => 'Id_Column',sequenceName => 'id_Column_seq'
);
Currently I'm getting a error
ERROR:
syntax error at or near "IF"
LINE 1: IF EXISTS (
^
I'm familiar with handling dynamic queries in SQL server but facing an issue with PostgreSQL as I'm a beginner. Please suggest me a solution