Skip to content

Instantly share code, notes, and snippets.

@mixerp
Created August 5, 2017 09:15
Show Gist options
  • Save mixerp/34877633a806b0e195b50281b7adebc6 to your computer and use it in GitHub Desktop.
Save mixerp/34877633a806b0e195b50281b7adebc6 to your computer and use it in GitHub Desktop.
Resets all sequences in all schema in the current PostgreSQL database.
DO
$$
DECLARE _sql text;
BEGIN
WITH all_sequences
AS
(
SELECT
pg_namespace.nspname AS schema_name,
pg_class.relname AS table_name,
pg_class.oid AS table_oid,
pg_attribute.attname AS column_name,
substring(pg_attrdef.adsrc from E'^nextval\\(''([^'']*)''(?:::text|::regclass)?\\)')
AS seq_name
FROM pg_class
INNER JOIN pg_attribute
ON pg_class.oid = pg_attribute.attrelid
INNER JOIN pg_attrdef
ON
(
pg_attribute.attrelid = pg_attrdef.adrelid
AND pg_attribute.attnum = pg_attrdef.adnum
)
INNER JOIN pg_namespace
ON pg_class.relnamespace = pg_namespace.oid
WHERE has_schema_privilege(pg_namespace.oid,'USAGE')
AND pg_namespace.nspname NOT LIKE 'pg!_%' ESCAPE '!'
AND has_table_privilege(pg_class.oid,'SELECT')
AND (NOT pg_attribute.attisdropped)
AND pg_attrdef.adsrc ~ 'nextval'
)
SELECT
array_to_string
(
array_agg
(
'SELECT SETVAL(' ||
quote_literal(seq_name) ||
', COALESCE(MAX(' ||quote_ident(column_name)|| '), 1) ) FROM ' ||
quote_ident(schema_name)|| '.'||quote_ident(table_name)|| ';'
), E'\n'
)
INTO _sql
FROM all_sequences;
EXECUTE _sql;
END
$$
LANGUAGE plpgsql;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment