DO $$
DECLARE
    rec RECORD;
    seq_name TEXT;
BEGIN
    FOR rec IN
        SELECT
            c.table_schema,
            c.table_name
        FROM information_schema.columns c
        JOIN information_schema.table_constraints tc 
            ON c.table_name = tc.table_name 
            AND c.table_schema = tc.table_schema
        JOIN information_schema.constraint_column_usage ccu 
            ON tc.constraint_name = ccu.constraint_name
        WHERE c.column_name = 'id'
            AND tc.constraint_type = 'PRIMARY KEY'
            AND c.column_default IS NULL
            AND c.data_type IN ('integer', 'bigint')
            AND c.table_schema = 'public'
    LOOP
        seq_name := rec.table_name || '_id_seq';
        EXECUTE format('CREATE SEQUENCE IF NOT EXISTS %I START WITH 1 INCREMENT BY 1;', seq_name);
        EXECUTE format('ALTER TABLE %I ALTER COLUMN id SET DEFAULT nextval(''%I'');', rec.table_name, seq_name);
    END LOOP;
END $$;