Created
September 10, 2025 20:18
-
-
Save Edlavio/88200c960d04cad170500474f9b52e46 to your computer and use it in GitHub Desktop.
Reset PostgreSQL Sequences After Data Import - This PL/pgSQL script dynamically resets all sequences in a PostgreSQL database to match the current maximum value of the primary key column they are associated with.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| DO $$ | |
| DECLARE | |
| seq_name TEXT; | |
| tbl_name TEXT; | |
| col_name TEXT; | |
| max_id BIGINT; | |
| BEGIN | |
| FOR seq_name, tbl_name, col_name IN | |
| SELECT | |
| s.relname AS seq_name, | |
| t.relname AS tbl_name, | |
| a.attname AS col_name | |
| FROM pg_class s | |
| JOIN pg_depend d ON d.objid = s.oid | |
| JOIN pg_class t ON t.oid = d.refobjid | |
| JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = d.refobjsubid | |
| WHERE s.relkind = 'S' AND d.deptype = 'a' | |
| LOOP | |
| EXECUTE format('SELECT COALESCE(MAX(%I), 0) FROM %I.%I', col_name, 'public', tbl_name) INTO max_id; | |
| RAISE NOTICE 'Updating sequence % to %', seq_name, max_id + 1; | |
| EXECUTE format('SELECT setval(''%I'', %s)', seq_name, max_id + 1); | |
| END LOOP; | |
| END; | |
| $$ LANGUAGE plpgsql; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment