Skip to content

Instantly share code, notes, and snippets.

@ckpiyanon
Last active November 13, 2023 04:09
Show Gist options
  • Save ckpiyanon/1cc943ecf19977a78ba8a69b39b4c5a2 to your computer and use it in GitHub Desktop.
Save ckpiyanon/1cc943ecf19977a78ba8a69b39b4c5a2 to your computer and use it in GitHub Desktop.
DO $$
DECLARE
cur CURSOR FOR SELECT
table_name,
column_default
FROM information_schema.columns
WHERE
column_name = 'id' AND
table_schema = 'public' AND
table_name NOT IN ('Migrations', 'SequelizeMeta');
seq_name VARCHAR(255);
latest_id BIGINT;
set_id BIGINT;
BEGIN
FOR seq IN cur LOOP
seq_name := SPLIT_PART(seq.column_default, '''', 2);
EXECUTE 'SELECT MAX(id) FROM "' || seq.table_name || '"' INTO latest_id;
IF latest_id IS NOT NULL AND latest_id != 0 THEN
SELECT setval(seq_name::regclass, latest_id) INTO set_id;
ELSE
SELECT setval(seq_name::regclass, NULL) INTO set_id;
END IF;
RAISE INFO 'SEQUENCE SET [name="%", val=%]', seq_name, set_id;
END LOOP;
END $$;
-- check latest sequence
DO $$
DECLARE
cur CURSOR FOR SELECT
table_name,
column_default
FROM information_schema.columns
WHERE
column_name = 'id' AND
table_schema = 'public' AND
table_name NOT IN ('Migrations', 'SequelizeMeta');
seq_name VARCHAR(255);
latest_id BIGINT;
set_id BIGINT;
BEGIN
FOR seq IN cur LOOP
seq_name := SPLIT_PART(seq.column_default, '''', 2);
IF EXISTS (SELECT 0 FROM pg_class where relname = seq_name)
THEN
BEGIN
SELECT currval(seq_name::regclass) INTO set_id;
EXCEPTION
WHEN SQLSTATE '55000' THEN
SELECT NULL INTO set_id;
END;
RAISE INFO 'LATEST NUMBER (CALLED) [name="%", val=%]', seq_name, set_id;
ELSE
RAISE NOTICE 'SEQUENCE "%" DOES NOT EXIST', seq_name;
END IF;
END LOOP;
END $$;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment