Function that generates as many users as necessary for the auth.users table: BEGIN; WITH user_values AS ( SELECT uuid_generate_v4() AS id, '00000000-0000-0000-0000-000000000000'::uuid AS instance_id, 'authenticated' AS aud, 'authenticated' AS role, (ROW_NUMBER() OVER ()) || '@gmail.com' AS email, crypt('password123', gen_salt('bf')) AS encrypted_password, now() AS email_confirmed_at, NULL::timestamp AS invited_at, '' AS confirmation_token, NULL::timestamp AS confirmation_sent_at, '' AS recovery_token, NULL::timestamp AS recovery_sent_at, '' AS email_change_token_new, '' AS email_change, NULL::timestamp AS email_change_sent_at, now()::timestamp AS last_sign_in_at, '{"provider":"email","providers":["email"]}'::jsonb AS raw_app_meta_data, '{}'::jsonb AS raw_user_meta_data, 0::boolean AS is_super_admin, '2022-10-04 03:41:27.391146+00'::timestamp AS created_at, '2022-10-04 03:41:27.391146+00'::timestamp AS updated_at, NULL AS phone, NULL::timestamp AS phone_confirmed_at, '' AS phone_change, '' AS phone_change_token, NULL::timestamp AS phone_change_sent_at, '' AS email_change_token_current, 0 AS email_change_confirm_status, NULL::timestamp AS banned_until, '' AS reauthentication_token, NULL::timestamp AS reauthentication_sent_at FROM generate_series(1, 100) ), inserted_users AS ( INSERT INTO auth.users ( id, instance_id, aud, role, email, encrypted_password, email_confirmed_at, invited_at, confirmation_token, confirmation_sent_at, recovery_token, recovery_sent_at, email_change_token_new, email_change, email_change_sent_at, last_sign_in_at, raw_app_meta_data, raw_user_meta_data, is_super_admin, created_at, updated_at, phone, phone_confirmed_at, phone_change, phone_change_token, phone_change_sent_at, email_change_token_current, email_change_confirm_status, banned_until, reauthentication_token, reauthentication_sent_at ) SELECT * FROM user_values RETURNING id, instance_id ) --(OPTINAL) Here you can insert the created users into another table -- INSERT INTO public.user_profile ( -- id, -- created_at, -- username -- ) -- SELECT -- id, -- now(), -- 'USUARIO' || ROW_NUMBER() OVER (), -- FROM inserted_users; COMMIT; )