- derive the primary key sequence from the column's nextval() default instead of an unused identity_<table>_<pk> sequence - setval after table creation (full and diff paths), forward-only, MAX+1 with is_called=false - do not DROP DEFAULT on serial/bigserial columns without a model default
27 lines
771 B
Cheetah
27 lines
771 B
Cheetah
DO $$
|
|
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 = '{{.SequenceName}}'
|
|
AND n.nspname = '{{.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('{{qual_table_raw .SchemaName .SequenceName}}'::regclass, m_cnt, false);
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
$$; |