DO {{dollar_delimiter}} DECLARE m_cnt bigint; m_next bigint; BEGIN IF EXISTS ( SELECT 1 FROM pg_class c INNER JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relname = {{quote .SequenceName}} AND n.nspname = {{quote .SchemaName}} AND c.relkind = 'S' ) THEN SELECT COALESCE(MAX({{quote_ident .ColumnName}}), 0) + 1 FROM {{qual_table .SchemaName .TableName}} INTO m_cnt; SELECT CASE WHEN is_called THEN last_value + 1 ELSE last_value END FROM {{qual_table .SchemaName .SequenceName}} INTO m_next; -- Only move the sequence forward; never rewind one that is already past the data. IF m_cnt > m_next THEN PERFORM setval({{quote (qual_table .SchemaName .SequenceName)}}::regclass, m_cnt, false); END IF; END IF; END; {{dollar_delimiter}};