Files
relspecgo/pkg/writers/pgsql/templates/set_sequence_value.tmpl
T

27 lines
817 B
Cheetah

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}};